This script analyze 10x scRNA-seq data from E15, E16, P1, and P4 wt mice

library(dplyr)
library(Matrix)
require(devtools)
install_version("mvtnorm", version = "1.0-8", repos = "http://cran.us.r-project.org") ##Note that I need version 1.0-8 because the newest version requires R>3.5 (my r version is 3.4). mvtnorm is a dependency for fpc which is a dependency for Seurat.
library(Seurat)
First load E15 data (nGene 1k, nUMI 5k already applied)
load("E15_Oct10_10X_Trachea.RData")
E15_Oct10_mm10.1.2.0_Trachea <- SetAllIdent(object = E15_Oct10_mm10.1.2.0_Trachea, id = "genotype")
second load seu_E16P1P4_wt.RData
load("seu_E16P1P4_wt.RData")
data has been log normalized.
seurat_E15E16P1P4_wt<-MergeSeurat(object1 = seu_E16P1P4_wt,object2 = SubsetData(object=E15_Oct10_mm10.1.2.0_Trachea,ident.use=c("wt")),min.cells = 1,min.genes = 1,project="E15Oct10_E16Dec7_P1Dec11_P4Oct18")
Alternatively, seurat_E15E16P1P4_wt object can be created by merging 4 seurat objects in E15_Oct10_10X_Trachea.RData, E16_Dec7v3_Trachea.RData, seu_P1_Dec11_mm10.1.2.0.RData, and P4_10X_mm10_1.2.0.RData
remove old analysis done on the E16P1P4 dataset:
seurat_E15E16P1P4_wt@meta.data<-seurat_E15E16P1P4_wt@meta.data[,-which(names(seurat_E15E16P1P4_wt@meta.data) %in% c("res.0.8", "res.1.2","res.1.4","cell_type","S.Score","G2M.Score","Phase","old.ident","CellCycle_score","mocosaGoblet_score","ciliopathy_score","PCD_score"))]
Basic stats about the data:
median(seurat_E15E16P1P4_wt@meta.data$nGene) 
[1] 2979
mean(seurat_E15E16P1P4_wt@meta.data$nGene) 
[1] 3220.857
median(seurat_E15E16P1P4_wt@meta.data$nUMI) 
[1] 9872
mean(seurat_E15E16P1P4_wt@meta.data$nUMI) 
[1] 12465.92
table(seurat_E15E16P1P4_wt@meta.data$age) 

 E15  E16   P1   P4 
4398 8432 2270 1709 
table(seurat_E15E16P1P4_wt@meta.data$seq_group) 

E15_Oct10_wt_green   E15_Oct10_wt_red      E16_Dec7_wt_1      E16_Dec7_wt_6      P1_Dec11_wt_6      P1_Dec11_wt_7 
              2806               1592               3338               5094               1110               1160 
 P4_Oct18_wt_green    P4_Oct18_wt_red 
               803                906 
scale the data:
seurat_E15E16P1P4_wt <- ScaleData(object = seurat_E15E16P1P4_wt)
find variable genes and run PCA:
seurat_E15E16P1P4_wt <- FindVariableGenes(object = seurat_E15E16P1P4_wt, do.plot = TRUE, x.low.cutoff=0.1,x.high.cutoff = Inf, y.cutoff = 0.5)
seurat_E15E16P1P4_wt <- RunPCA(object = seurat_E15E16P1P4_wt,pcs.compute = 25, do.print = FALSE)
seurat_E15E16P1P4_wt <- ProjectPCA(object = seurat_E15E16P1P4_wt, do.print = FALSE)

PCElbowPlot(object = seurat_E15E16P1P4_wt,num.pc = 25)
clustering:
try resolution=0.8:
n.pcs = 24
res.used <- 0.8

seurat_E15E16P1P4_wt <- FindClusters(object = seurat_E15E16P1P4_wt, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)
seurat_E15E16P1P4_wt <- RunTSNE(object = seurat_E15E16P1P4_wt, dims.use = 1:n.pcs, seed.use = 10, perplexity=30, dim.embed = 2)

resolution=1.4:
n.pcs = 24
res.used <- 1.4
seurat_E15E16P1P4_wt <- FindClusters(object = seurat_E15E16P1P4_wt, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)
Build parameters exactly match those of already computed and stored SNN. To force recalculation, set force.recalc to TRUE.
k.param=15 to have better distinction for rare cells:
seurat_E15E16P1P4_wt <- RunTSNE(object = seurat_E15E16P1P4_wt, dims.use = 1:n.pcs, seed.use = 10, perplexity=30, dim.embed = 2,k.param=15)
TSNEPlot(object = seurat_E15E16P1P4_wt, do.label = T,pt.size = 0.2,group.by="res.1.4")

res1.6 leads to further specification of immune cells, P1 and P4 mesenchymal progenitor separation, and separation of E16 basal:
n.pcs = 24
res.used <- 1.6

seurat_E15E16P1P4_wt <- FindClusters(object = seurat_E15E16P1P4_wt, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)
seurat_E15E16P1P4_wt <- RunTSNE(object = seurat_E15E16P1P4_wt, dims.use = 1:n.pcs, seed.use = 10, perplexity=30, dim.embed = 2,k.param=15)
TSNEPlot(object = seurat_E15E16P1P4_wt, do.label = T,pt.size = 0.2,group.by="res.1.6")
We will use resolution of 1.4 for further analysis.

——————————————————————–

#save(seurat_E15E16P1P4_wt,file="seuratE15E16P1P4_wt.RData")  # this seurat object will be updated and saved as analysis goes
#load("seuratE15E16P1P4_wt.RData")

2 E16 wt mice:

2 P1 wt mice:

Annotate clusters by known markers:
seurat_E15E16P1P4_wt <- SetAllIdent(object = seurat_E15E16P1P4_wt, id = "res.1.4")
DoHeatmap(object = seurat_E15E16P1P4_wt, genes.use = c("Epcam","Trp63","Krt4","Scgb3a2","Spdef","Creb3l1","Muc5b","Gp2","Foxj1","Snap25","Chga","Plp1","Mpz","Fcer1g","Pecam1","Acta2","Myh11","Col11a1","Acan","Wnt2","Pi16","Ly6a","Twist2","Mki67","Top2a","Tg","Pax8"), 
    slim.col.label = TRUE, group.label.rot = TRUE,use.scaled = T,group.by="res.1.4",group.cex = 25,cex.row=30,group.order = c(3,8,11,9,1,30,2,20,29,7,26,27,28,14,31,23,18,21,13,15,19,16,10,12,6,4,17,0,5,33,22,25,24,32)
  )

cluster annotation v1:
library(plyr)
seurat_E15E16P1P4_wt@meta.data$cell_type<-mapvalues(seurat_E15E16P1P4_wt@meta.data$res.1.4,from=c("0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33"),to=c("Fibroblast","Basal","Secretory","Basal","Fibroblast","Fibroblast","Fibroblast","Secretory","CyclingEpithelial","Transitional","Fibroblast","CyclingEpithelial","Fibroblast","Fibroblast","Immune","Fibroblast","Fibroblast","Fibroblast","Muscle","Fibroblast","Ciliated","Muscle","MesenchymalProgenitor","Endothelial","Thyroid","MesenchymalProgenitor","Neural/Schwann","Ciliated","CiliaSecretory","Basal","CyclingEpithelial","Endothelial","Doublet","MesenchymalProgenitor"))
use nonShh subset clustering information (seurat object: E15E16P1P4_wt_nonShh resolution=1.6) to annotate those non-epithelial cells:
seurat_E15E16P1P4_wt<-AddMetaData(object = seurat_E15E16P1P4_wt, metadata = wt_nonShh_cellType1.6, col.name = "specific_type")
table(seurat_E15E16P1P4_wt@meta.data$specific_type)

          Chondrocyte     CyclingFibroblast            Fibroblast              Immune_1              Immune_2 
                  956                  1516                  4688                   347                   166 
 LymphaticEndothelial MesenchymalProgenitor                Muscle            Neuron/NEC                   RBC 
                  134                   511                   720                    51                    59 
          SchwannCell   VascularEndothelial         VSMC/pericyte 
                   94                   268                    80 
keep the epithelial cell annotation as in seurat_E15E16P1P4_wt@meta.data$cell_type:
seurat_E15E16P1P4_wt@meta.data$specific_type <- ifelse(is.na(seurat_E15E16P1P4_wt@meta.data$specific_type), as.character(seurat_E15E16P1P4_wt@meta.data$cell_type), as.character(seurat_E15E16P1P4_wt@meta.data$specific_type))
now we have new (more detailed) annotation for all cells:
table(seurat_E15E16P1P4_wt@meta.data$specific_type)

                Basal           Chondrocyte        CiliaSecretory              Ciliated     CyclingEpithelial 
                 2491                   956                   196                   571                  1297 
    CyclingFibroblast               Doublet            Fibroblast              Immune_1              Immune_2 
                 1516                    89                  4688                   347                   166 
 LymphaticEndothelial MesenchymalProgenitor                Muscle            Neuron/NEC                   RBC 
                  134                   511                   720                    51                    59 
          SchwannCell             Secretory               Thyroid          Transitional   VascularEndothelial 
                   94                  1729                   245                   601                   268 
        VSMC/pericyte 
                   80 
table(seurat_E15E16P1P4_wt@meta.data$specific_type,seurat_E15E16P1P4_wt@meta.data$gate,useNA = "always")
                       
                        green  red <NA>
  Basal                  1106    1 1384
  Chondrocyte               4  327  625
  CiliaSecretory           76    0  120
  Ciliated                202    2  367
  CyclingEpithelial      1160    3  134
  CyclingFibroblast         4  374 1138
  Doublet                   0    0   89
  Fibroblast               27  833 3828
  Immune_1                  0   72  275
  Immune_2                  0   46  120
  LymphaticEndothelial      0   33  101
  MesenchymalProgenitor     7  192  312
  Muscle                    1  251  468
  Neuron/NEC                0   36   15
  RBC                       0    1   58
  SchwannCell               0   36   58
  Secretory               412    1 1316
  Thyroid                   8  213   24
  Transitional            601    0    0
  VascularEndothelial       0   67  201
  VSMC/pericyte             1   10   69
  <NA>                      0    0    0
specific_type of each cell is defined later.

save(seurat_E15E16P1P4_wt,file="seuratE15E16P1P4_wt.RData")

find differentially expressed genes between clusters of interest:
seurat_E15E16P1P4_wt <- SetAllIdent(object = seurat_E15E16P1P4_wt, id = "res.1.4")
E15E16P1P4_wt_res14_BasalSecretory<-FindMarkers(seurat_E15E16P1P4_wt,ident.1=c(9,30),only.pos = TRUE)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~02m 44s      
   |++                                                | 2 % ~02m 46s      
   |++                                                | 3 % ~02m 41s      
   |+++                                               | 4 % ~02m 38s      
   |+++                                               | 6 % ~02m 34s      
   |++++                                              | 7 % ~02m 32s      
   |++++                                              | 8 % ~02m 33s      
   |+++++                                             | 9 % ~02m 31s      
   |++++++                                            | 10% ~02m 29s      
   |++++++                                            | 11% ~02m 26s      
   |+++++++                                           | 12% ~02m 24s      
   |+++++++                                           | 13% ~02m 22s      
   |++++++++                                          | 15% ~02m 20s      
   |++++++++                                          | 16% ~02m 22s      
   |+++++++++                                         | 17% ~02m 20s      
   |+++++++++                                         | 18% ~02m 17s      
   |++++++++++                                        | 19% ~02m 15s      
   |+++++++++++                                       | 20% ~02m 13s      
   |+++++++++++                                       | 21% ~02m 10s      
   |++++++++++++                                      | 22% ~02m 08s      
   |++++++++++++                                      | 24% ~02m 06s      
   |+++++++++++++                                     | 25% ~02m 04s      
   |+++++++++++++                                     | 26% ~02m 02s      
   |++++++++++++++                                    | 27% ~02m 00s      
   |+++++++++++++++                                   | 28% ~01m 58s      
   |+++++++++++++++                                   | 29% ~01m 56s      
   |++++++++++++++++                                  | 30% ~01m 54s      
   |++++++++++++++++                                  | 31% ~01m 53s      
   |+++++++++++++++++                                 | 33% ~01m 51s      
   |+++++++++++++++++                                 | 34% ~01m 49s      
   |++++++++++++++++++                                | 35% ~01m 47s      
   |++++++++++++++++++                                | 36% ~01m 45s      
   |+++++++++++++++++++                               | 37% ~01m 44s      
   |++++++++++++++++++++                              | 38% ~01m 42s      
   |++++++++++++++++++++                              | 39% ~01m 40s      
   |+++++++++++++++++++++                             | 40% ~01m 39s      
   |+++++++++++++++++++++                             | 42% ~01m 37s      
   |++++++++++++++++++++++                            | 43% ~01m 35s      
   |++++++++++++++++++++++                            | 44% ~01m 33s      
   |+++++++++++++++++++++++                           | 45% ~01m 31s      
   |++++++++++++++++++++++++                          | 46% ~01m 29s      
   |++++++++++++++++++++++++                          | 47% ~01m 27s      
   |+++++++++++++++++++++++++                         | 48% ~01m 25s      
   |+++++++++++++++++++++++++                         | 49% ~01m 23s      
   |++++++++++++++++++++++++++                        | 51% ~01m 21s      
   |++++++++++++++++++++++++++                        | 52% ~01m 19s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 17s      
   |+++++++++++++++++++++++++++                       | 54% ~01m 16s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 14s      
   |+++++++++++++++++++++++++++++                     | 56% ~01m 12s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 10s      
   |++++++++++++++++++++++++++++++                    | 58% ~01m 08s      
   |++++++++++++++++++++++++++++++                    | 60% ~01m 06s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 05s      
   |+++++++++++++++++++++++++++++++                   | 62% ~01m 03s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 01s      
   |+++++++++++++++++++++++++++++++++                 | 64% ~59s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~57s          
   |++++++++++++++++++++++++++++++++++                | 66% ~56s          
   |++++++++++++++++++++++++++++++++++                | 67% ~54s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~52s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~50s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~49s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~47s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~45s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~43s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~41s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~39s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~37s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~35s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~33s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~32s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~30s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~28s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~26s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~24s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~22s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~20s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~17s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02m 46s
E15E16P1P4_wt_res14_BasalSecretory
For the purpose of visualization, we average within each specific cell type:
seurat_E15E16P1P4_wt<-SetAllIdent(object = seurat_E15E16P1P4_wt, id = "specific_type")
average_wt_specific_Annotation<-AverageExpression(object = seurat_E15E16P1P4_wt,return.seurat = T)
Finished averaging RNA for cluster Basal
Finished averaging RNA for cluster Chondrocyte
Finished averaging RNA for cluster CiliaSecretory
Finished averaging RNA for cluster Ciliated
Finished averaging RNA for cluster CyclingEpithelial
Finished averaging RNA for cluster CyclingFibroblast
Finished averaging RNA for cluster Doublet
Finished averaging RNA for cluster Fibroblast
Finished averaging RNA for cluster Immune_1
Finished averaging RNA for cluster Immune_2
Finished averaging RNA for cluster LymphaticEndothelial
Finished averaging RNA for cluster MesenchymalProgenitor
Finished averaging RNA for cluster Muscle
Finished averaging RNA for cluster Neuron/NEC
Finished averaging RNA for cluster RBC
Finished averaging RNA for cluster SchwannCell
Finished averaging RNA for cluster Secretory
Finished averaging RNA for cluster Thyroid
Finished averaging RNA for cluster Transitional
Finished averaging RNA for cluster VascularEndothelial
Finished averaging RNA for cluster VSMC/pericyte
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Scaling data matrix

  |                                                                                                                    
  |                                                                                                              |   0%
  |                                                                                                                    
  |==============================================================================================================| 100%

print(levels(seurat_E15E16P1P4_wt@ident))

seurat_E15E16P1P4_wt<-SetAllIdent(object = seurat_E15E16P1P4_wt, id = "specific_type")
seurat_E15E16P1P4_wt@ident = factor(seurat_E15E16P1P4_wt@ident,levels(seurat_E15E16P1P4_wt@ident)[c(5,1,19,17,4,3,14,16,20,11,9,10,13,21,12,2,8,6,18,15,7)])
DotPlot(object = seurat_E15E16P1P4_wt, cols.use = c("forestgreen","magenta3"),genes.plot = c("Mki67","Epcam","Trp63","Krt5","Krt8","Scgb3a2","Muc5ac","Spdef","Creb3l1","Gp2","Foxj1","Cdhr3","Snap25","Ascl1","Chga","Plp1","Mpz","Pecam1","Lyve1","Fcer1g","Cd3g","C1qa","Cx3cr1","Acta2","Myh11","Rgs5","Notch3","Wnt2","Ly6a","Pi16","Thy1","Cd34","Acan","Sox9","Twist2"),group.by = "ident", x.lab.rot = T,plot.legend = T,col.max = 2,col.min = -2)

epithlial cells across ages:

df_wt<-FetchData(seurat_E15E16P1P4_wt,c("Ano1","Cftr","Krt4","Krt13","res.1.4","age","seq_group","cell_type","specific_type"))

any possible ionocytes?:

table(df_all_wt$res.1.4[df_all_wt$Foxi1>0])

 0  1 10 11 12 13 14 15 16 17 18 19  2 20 21 22 23 24 25 26 27 28 29  3 30 31 32 33  4  5  6  7  8  9 
 0  0  0  0  0  0  2  0  1  1  0  0  2  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
table(df_all_wt$res.1.4[df_all_wt$Cftr>0 & df_all_wt$Foxi1>0])

 0  1 10 11 12 13 14 15 16 17 18 19  2 20 21 22 23 24 25 26 27 28 29  3 30 31 32 33  4  5  6  7  8  9 
 0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
epithelial cell composition across ages:

table(seurat_E15E16P1P4_wt@meta.data$age[seurat_E15E16P1P4_wt@meta.data$res.1.4 %in% c(11,8,3,9,1,29,30,2,7,20,27,28)],seurat_E15E16P1P4_wt@meta.data$cell_type[seurat_E15E16P1P4_wt@meta.data$res.1.4 %in% c(11,8,3,9,1,29,30,2,7,20,27,28)])
     
      Basal CiliaSecretory Ciliated CyclingEpithelial Secretory Transitional
  E15  1017              0        1              1155         0          601
  E16  1324              3      294               132      1094            0
  P1     60            117       73                 2       222            0
  P4     90             76      203                 8       413            0
a few lineage markers:

a few lineage markers:

seurat_E15E16P1P4_wt=buildClusterTree(seurat_E15E16P1P4_wt,do.reorder = F,reorder.numeric = F,pcs.use = 1:24)
'buildClusterTree' is deprecated.
Use 'BuildClusterTree' instead.
See help("Deprecated") and help("Seurat-deprecated").Finished averaging RNA for cluster 0
Finished averaging RNA for cluster 1
Finished averaging RNA for cluster 2
Finished averaging RNA for cluster 3
Finished averaging RNA for cluster 4
Finished averaging RNA for cluster 5
Finished averaging RNA for cluster 6
Finished averaging RNA for cluster 7
Finished averaging RNA for cluster 8
Finished averaging RNA for cluster 9
Finished averaging RNA for cluster 10
Finished averaging RNA for cluster 11
Finished averaging RNA for cluster 12
Finished averaging RNA for cluster 13
Finished averaging RNA for cluster 14
Finished averaging RNA for cluster 15
Finished averaging RNA for cluster 16
Finished averaging RNA for cluster 17
Finished averaging RNA for cluster 18
Finished averaging RNA for cluster 19
Finished averaging RNA for cluster 20
Finished averaging RNA for cluster 21
Finished averaging RNA for cluster 22
Finished averaging RNA for cluster 23
Finished averaging RNA for cluster 24
Finished averaging RNA for cluster 25
Finished averaging RNA for cluster 26
Finished averaging RNA for cluster 27
Finished averaging RNA for cluster 28
Finished averaging RNA for cluster 29
Finished averaging RNA for cluster 30
Finished averaging RNA for cluster 31
Finished averaging RNA for cluster 32
Finished averaging RNA for cluster 33

potential mesenchymal progenitors:
E15E16P1P4_wt_res14_22over33<-FindMarkers(seurat_E15E16P1P4_wt,ident.1=c(22),ident.2 = c(33),only.pos = TRUE)
E15E16P1P4_wt_res14_22over33
E15E16P1P4_wt_res14_33over22<-FindMarkers(seurat_E15E16P1P4_wt,ident.1=c(33),ident.2 = c(22),only.pos = TRUE)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~07s          
   |++                                                | 2 % ~07s          
   |++                                                | 3 % ~07s          
   |+++                                               | 4 % ~07s          
   |+++                                               | 5 % ~13s          
   |++++                                              | 6 % ~12s          
   |++++                                              | 8 % ~11s          
   |+++++                                             | 9 % ~10s          
   |+++++                                             | 10% ~10s          
   |++++++                                            | 11% ~09s          
   |++++++                                            | 12% ~09s          
   |+++++++                                           | 13% ~09s          
   |+++++++                                           | 14% ~08s          
   |++++++++                                          | 15% ~08s          
   |+++++++++                                         | 16% ~08s          
   |+++++++++                                         | 17% ~08s          
   |++++++++++                                        | 18% ~07s          
   |++++++++++                                        | 19% ~07s          
   |+++++++++++                                       | 20% ~07s          
   |+++++++++++                                       | 22% ~07s          
   |++++++++++++                                      | 23% ~07s          
   |++++++++++++                                      | 24% ~07s          
   |+++++++++++++                                     | 25% ~06s          
   |+++++++++++++                                     | 26% ~06s          
   |++++++++++++++                                    | 27% ~06s          
   |++++++++++++++                                    | 28% ~06s          
   |+++++++++++++++                                   | 29% ~06s          
   |++++++++++++++++                                  | 30% ~06s          
   |++++++++++++++++                                  | 31% ~06s          
   |+++++++++++++++++                                 | 32% ~06s          
   |+++++++++++++++++                                 | 33% ~06s          
   |++++++++++++++++++                                | 34% ~05s          
   |++++++++++++++++++                                | 35% ~05s          
   |+++++++++++++++++++                               | 37% ~05s          
   |+++++++++++++++++++                               | 38% ~05s          
   |++++++++++++++++++++                              | 39% ~05s          
   |++++++++++++++++++++                              | 40% ~05s          
   |+++++++++++++++++++++                             | 41% ~05s          
   |+++++++++++++++++++++                             | 42% ~05s          
   |++++++++++++++++++++++                            | 43% ~05s          
   |+++++++++++++++++++++++                           | 44% ~04s          
   |+++++++++++++++++++++++                           | 45% ~04s          
   |++++++++++++++++++++++++                          | 46% ~04s          
   |++++++++++++++++++++++++                          | 47% ~04s          
   |+++++++++++++++++++++++++                         | 48% ~04s          
   |+++++++++++++++++++++++++                         | 49% ~04s          
   |++++++++++++++++++++++++++                        | 51% ~04s          
   |++++++++++++++++++++++++++                        | 52% ~04s          
   |+++++++++++++++++++++++++++                       | 53% ~04s          
   |+++++++++++++++++++++++++++                       | 54% ~04s          
   |++++++++++++++++++++++++++++                      | 55% ~04s          
   |++++++++++++++++++++++++++++                      | 56% ~03s          
   |+++++++++++++++++++++++++++++                     | 57% ~03s          
   |++++++++++++++++++++++++++++++                    | 58% ~03s          
   |++++++++++++++++++++++++++++++                    | 59% ~03s          
   |+++++++++++++++++++++++++++++++                   | 60% ~03s          
   |+++++++++++++++++++++++++++++++                   | 61% ~03s          
   |++++++++++++++++++++++++++++++++                  | 62% ~03s          
   |++++++++++++++++++++++++++++++++                  | 63% ~03s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~03s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~03s          
   |++++++++++++++++++++++++++++++++++                | 67% ~03s          
   |++++++++++++++++++++++++++++++++++                | 68% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~02s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~02s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~02s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~02s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~02s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~02s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~02s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 08s
E15E16P1P4_wt_res14_33over22
E15E16P1P4_wt_res14_25over22<-FindMarkers(seurat_E15E16P1P4_wt,ident.1=c(25),ident.2 = c(22),only.pos = TRUE)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~05s          
   |++                                                | 2 % ~04s          
   |++                                                | 4 % ~04s          
   |+++                                               | 5 % ~04s          
   |+++                                               | 6 % ~04s          
   |++++                                              | 7 % ~04s          
   |+++++                                             | 8 % ~04s          
   |+++++                                             | 9 % ~04s          
   |++++++                                            | 11% ~04s          
   |++++++                                            | 12% ~04s          
   |+++++++                                           | 13% ~04s          
   |++++++++                                          | 14% ~04s          
   |++++++++                                          | 15% ~04s          
   |+++++++++                                         | 16% ~04s          
   |+++++++++                                         | 18% ~04s          
   |++++++++++                                        | 19% ~04s          
   |++++++++++                                        | 20% ~04s          
   |+++++++++++                                       | 21% ~04s          
   |++++++++++++                                      | 22% ~03s          
   |++++++++++++                                      | 24% ~03s          
   |+++++++++++++                                     | 25% ~03s          
   |+++++++++++++                                     | 26% ~03s          
   |++++++++++++++                                    | 27% ~03s          
   |+++++++++++++++                                   | 28% ~03s          
   |+++++++++++++++                                   | 29% ~03s          
   |++++++++++++++++                                  | 31% ~03s          
   |++++++++++++++++                                  | 32% ~03s          
   |+++++++++++++++++                                 | 33% ~03s          
   |++++++++++++++++++                                | 34% ~03s          
   |++++++++++++++++++                                | 35% ~03s          
   |+++++++++++++++++++                               | 36% ~03s          
   |+++++++++++++++++++                               | 38% ~03s          
   |++++++++++++++++++++                              | 39% ~03s          
   |++++++++++++++++++++                              | 40% ~03s          
   |+++++++++++++++++++++                             | 41% ~03s          
   |++++++++++++++++++++++                            | 42% ~03s          
   |++++++++++++++++++++++                            | 44% ~03s          
   |+++++++++++++++++++++++                           | 45% ~03s          
   |+++++++++++++++++++++++                           | 46% ~02s          
   |++++++++++++++++++++++++                          | 47% ~02s          
   |+++++++++++++++++++++++++                         | 48% ~02s          
   |+++++++++++++++++++++++++                         | 49% ~02s          
   |++++++++++++++++++++++++++                        | 51% ~02s          
   |++++++++++++++++++++++++++                        | 52% ~02s          
   |+++++++++++++++++++++++++++                       | 53% ~02s          
   |++++++++++++++++++++++++++++                      | 54% ~02s          
   |++++++++++++++++++++++++++++                      | 55% ~02s          
   |+++++++++++++++++++++++++++++                     | 56% ~02s          
   |+++++++++++++++++++++++++++++                     | 58% ~02s          
   |++++++++++++++++++++++++++++++                    | 59% ~02s          
   |++++++++++++++++++++++++++++++                    | 60% ~02s          
   |+++++++++++++++++++++++++++++++                   | 61% ~02s          
   |++++++++++++++++++++++++++++++++                  | 62% ~02s          
   |++++++++++++++++++++++++++++++++                  | 64% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~02s          
   |++++++++++++++++++++++++++++++++++                | 67% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 05s
E15E16P1P4_wt_res14_25over22

scGPS (scoring):
head(geneList$Mucociliary)
[1] "Fcgr3"  "Dnah7c" "Dnah7b" "Dnah7a" "Mst1"   "Mst1r" 
library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:plyr’:

    arrange, count, desc, failwith, id, mutate, rename, summarise, summarize

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
percentile_table_E15E16P1P4wt<-apply(seurat_E15E16P1P4_wt@data,1,percent_rank)
percentile_table_E15E16P1P4wt[1:6,1:6]
                               Xkr4 Gm1992 Gm37381       Rp1 Sox17 Gm37323
E16_Dec7_wt_1_AAACCTGAGATCCCGC    0      0       0 0.0000000     0       0
E16_Dec7_wt_1_AAACCTGAGGTGCAAC    0      0       0 0.0000000     0       0
E16_Dec7_wt_1_AAACCTGGTAAATGAC    0      0       0 0.0000000     0       0
E16_Dec7_wt_1_AAACCTGGTGATGCCC    0      0       0 0.0000000     0       0
E16_Dec7_wt_1_AAACCTGTCACATACG    0      0       0 0.0000000     0       0
E16_Dec7_wt_1_AAACCTGTCAGCGACC    0      0       0 0.9869705     0       0
 CellCycle_score_wt<- apply(percentile_table_E15E16P1P4wt[,colnames(percentile_table_E15E16P1P4wt) %in% geneList$Cell_cycle],1,mean)
 head( CellCycle_score_wt)
E16_Dec7_wt_1_AAACCTGAGATCCCGC E16_Dec7_wt_1_AAACCTGAGGTGCAAC E16_Dec7_wt_1_AAACCTGGTAAATGAC 
                    0.04833364                     0.10794933                     0.06216909 
E16_Dec7_wt_1_AAACCTGGTGATGCCC E16_Dec7_wt_1_AAACCTGTCACATACG E16_Dec7_wt_1_AAACCTGTCAGCGACC 
                    0.66890828                     0.10226353                     0.36390747 
seurat_E15E16P1P4_wt<-AddMetaData(object = seurat_E15E16P1P4_wt, metadata = CellCycle_score_wt, col.name = "CellCycle_score")
VlnPlot(object = seurat_E15E16P1P4_wt, features.plot = c("CellCycle_score"), nCol = 1,x.lab.rot = T,point.size.use = 0.3,use.raw=F,group.by="res.1.4")

wt_mocosaGoblet_score<- apply(percentile_table_E15E16P1P4wt[,colnames(percentile_table_E15E16P1P4wt) %in% geneList$Mucosa.epithelium.goblet],1,mean)
seurat_E15E16P1P4_wt<-AddMetaData(object = seurat_E15E16P1P4_wt, metadata = wt_mocosaGoblet_score, col.name = "mucosaGoblet_score")
VlnPlot(object = seurat_E15E16P1P4_wt, features.plot = c("mucosaGoblet_score"), nCol = 1,x.lab.rot = T,point.size.use = 0.3,use.raw=F,group.by="res.1.4")

 wt_ciliopathy_table<- percentile_table_E15E16P1P4wt[,colnames(percentile_table_E15E16P1P4wt) %in% geneList$Ciliopathy]
 wt_ciliopathy_score<- apply(wt_ciliopathy_table,1,mean)
 head(wt_ciliopathy_score)
seurat_E15E16P1P4_wt<-AddMetaData(object = seurat_E15E16P1P4_wt, metadata = wt_ciliopathy_score, col.name = "ciliopathy_score")

 wt_PCD_score<- apply(percentile_table_E15E16P1P4wt[,colnames(percentile_table_E15E16P1P4wt) %in% geneList$Primary.ciliary.dyskinesia],1,mean)
 head(wt_PCD_score)
E16_Dec7_wt_1_AAACCTGAGATCCCGC E16_Dec7_wt_1_AAACCTGAGGTGCAAC E16_Dec7_wt_1_AAACCTGGTAAATGAC 
                    0.07178531                     0.06811267                     0.05672251 
E16_Dec7_wt_1_AAACCTGGTGATGCCC E16_Dec7_wt_1_AAACCTGTCACATACG E16_Dec7_wt_1_AAACCTGTCAGCGACC 
                    0.09034630                     0.03588221                     0.66970120 
seurat_E15E16P1P4_wt<-AddMetaData(object = seurat_E15E16P1P4_wt, metadata = wt_PCD_score, col.name = "PCD_score")
VlnPlot(object = seurat_E15E16P1P4_wt, features.plot = c("PCD_score"), nCol = 1,x.lab.rot = T,point.size.use = 0.3,use.raw=F,group.by="res.1.4")

ggplot(seurat_E15E16P1P4_wt@meta.data[seurat_E15E16P1P4_wt@meta.data$specific_type %in% c("Secretory","CiliaSecretory"),],aes(age,mucosaGoblet_score))+facet_grid(.~specific_type)+geom_dotplot(binaxis="y",aes(fill=age),binwidth=0.01,stackdir="center",position=position_dodge(0.8), dotsize=0.2)+stat_compare_means(comparisons = list(c("E16", "P1"),c("P1", "P4"),c("E16", "P4")),method="wilcox.test",size=4,label="p.adj")+ stat_summary(aes(color=age),fun.data=mean_sdl, fun.args = list(mult=1), 
                 geom="pointrange",position=position_dodge(0.7))+ theme(axis.text.x = element_text(angle = 45,hjust=1),strip.text.x = element_text(size = 9, colour = "black", angle = 0))

 wt_bronchitis_score<- apply(percentile_table_E15E16P1P4wt[,colnames(percentile_table_E15E16P1P4wt) %in% geneList$Bronchiectasis.and.Bronchitis],1,mean)
 head(wt_bronchitis_score)
E16_Dec7_wt_1_AAACCTGAGATCCCGC E16_Dec7_wt_1_AAACCTGAGGTGCAAC E16_Dec7_wt_1_AAACCTGGTAAATGAC E16_Dec7_wt_1_AAACCTGGTGATGCCC 
                    0.05980333                     0.12838142                     0.10012107                     0.07827476 
E16_Dec7_wt_1_AAACCTGTCACATACG E16_Dec7_wt_1_AAACCTGTCAGCGACC 
                    0.09195436                     0.36792222 
seurat_E15E16P1P4_wt<-AddMetaData(object = seurat_E15E16P1P4_wt, metadata = wt_bronchitis_score, col.name = "Bronchiectasis_Bronchitis")

 wt_COPD_score<- apply(percentile_table_E15E16P1P4wt[,colnames(percentile_table_E15E16P1P4wt) %in% geneList$COPD],1,mean)
 head(wt_COPD_score)
E16_Dec7_wt_1_AAACCTGAGATCCCGC E16_Dec7_wt_1_AAACCTGAGGTGCAAC E16_Dec7_wt_1_AAACCTGGTAAATGAC 
                     0.1345453                      0.1974387                      0.1539624 
E16_Dec7_wt_1_AAACCTGGTGATGCCC E16_Dec7_wt_1_AAACCTGTCACATACG E16_Dec7_wt_1_AAACCTGTCAGCGACC 
                     0.1719776                      0.1320101                      0.2590983 
seurat_E15E16P1P4_wt<-AddMetaData(object = seurat_E15E16P1P4_wt, metadata = wt_COPD_score, col.name = "COPD")

 wt_asthma_score<- apply(percentile_table_E15E16P1P4wt[,colnames(percentile_table_E15E16P1P4wt) %in% geneList$Pulmonary...Asthma],1,mean)
 head(wt_asthma_score)
E16_Dec7_wt_1_AAACCTGAGATCCCGC E16_Dec7_wt_1_AAACCTGAGGTGCAAC E16_Dec7_wt_1_AAACCTGGTAAATGAC 
                    0.08485814                     0.13134618                     0.09996662 
E16_Dec7_wt_1_AAACCTGGTGATGCCC E16_Dec7_wt_1_AAACCTGTCACATACG E16_Dec7_wt_1_AAACCTGTCAGCGACC 
                    0.09764181                     0.08522185                     0.14710912 
seurat_E15E16P1P4_wt<-AddMetaData(object = seurat_E15E16P1P4_wt, metadata = wt_asthma_score, col.name = "Asthma")

check some human GWAS:
seurat_E15E16P1P4_wt<-SetAllIdent(object = seurat_E15E16P1P4_wt, id = "specific_type")
seurat_E15E16P1P4_wt@ident = factor(seurat_E15E16P1P4_wt@ident,levels(seurat_E15E16P1P4_wt@ident)[c(5,1,19,17,4,3,14,16,20,11,9,10,13,21,12,2,8,6,18,15,7)])
DotPlot(object = seurat_E15E16P1P4_wt, cols.use = c("forestgreen","magenta3"),genes.plot = c("Muc4","Muc20","Agtr2","Slc6a14","Ehf","Apip","Hhip","Chrna5","Htr4","Adgrg6","Thsd4","Fam13a","Gstcd","Rin3","Adam19","Tet2","Eefsec","Cfdp1","Tgfb2","Ager","Sgf29","Armc2","Pid1","Dsp","Mtcl1","Rarb","Sftpd","Cyp2a4","Cyp2a5"),group.by = "ident", x.lab.rot = T,plot.legend = T)

CF GWAS:
seurat_E15E16P1P4_wt<-SetAllIdent(object = seurat_E15E16P1P4_wt, id = "specific_type")
seurat_E15E16P1P4_wt@ident = factor(seurat_E15E16P1P4_wt@ident,levels(seurat_E15E16P1P4_wt@ident)[c(5,1,19,17,4,3,14,16,20,11,9,10,13,21,12,2,8,6,18,15,7)])
DotPlot(object = seurat_E15E16P1P4_wt, cols.use = c("forestgreen","magenta3"),genes.plot = c("Muc4","Muc20","Agtr2","Slc6a14","Ehf","Aplp1","Aplp2","H2-Aa","H2-Ab1","H2-Eb1","H2-Eb2"),group.by = "ident", x.lab.rot = T,plot.legend = T)

COPD:

Developmental lanscape:
basal cells across time:
seurat_E15E16P1P4_wt <- SetAllIdent(object = seurat_E15E16P1P4_wt, id = "res.1.4")
E15E16P1P4_wt_res14_3over1<-FindMarkers(seurat_E15E16P1P4_wt,ident.1=c(3),ident.2 = c(1),only.pos = TRUE)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~30s          
   |++                                                | 2 % ~28s          
   |++                                                | 3 % ~27s          
   |+++                                               | 4 % ~26s          
   |+++                                               | 5 % ~25s          
   |++++                                              | 6 % ~25s          
   |++++                                              | 7 % ~24s          
   |+++++                                             | 8 % ~24s          
   |+++++                                             | 9 % ~24s          
   |++++++                                            | 10% ~23s          
   |++++++                                            | 11% ~28s          
   |+++++++                                           | 12% ~27s          
   |+++++++                                           | 13% ~27s          
   |++++++++                                          | 14% ~26s          
   |++++++++                                          | 15% ~26s          
   |+++++++++                                         | 16% ~25s          
   |+++++++++                                         | 17% ~25s          
   |++++++++++                                        | 18% ~24s          
   |++++++++++                                        | 19% ~24s          
   |+++++++++++                                       | 20% ~23s          
   |+++++++++++                                       | 21% ~23s          
   |++++++++++++                                      | 22% ~22s          
   |++++++++++++                                      | 23% ~22s          
   |+++++++++++++                                     | 24% ~22s          
   |+++++++++++++                                     | 26% ~21s          
   |++++++++++++++                                    | 27% ~21s          
   |++++++++++++++                                    | 28% ~21s          
   |+++++++++++++++                                   | 29% ~20s          
   |+++++++++++++++                                   | 30% ~20s          
   |++++++++++++++++                                  | 31% ~20s          
   |++++++++++++++++                                  | 32% ~19s          
   |+++++++++++++++++                                 | 33% ~19s          
   |+++++++++++++++++                                 | 34% ~19s          
   |++++++++++++++++++                                | 35% ~18s          
   |++++++++++++++++++                                | 36% ~18s          
   |+++++++++++++++++++                               | 37% ~18s          
   |+++++++++++++++++++                               | 38% ~17s          
   |++++++++++++++++++++                              | 39% ~17s          
   |++++++++++++++++++++                              | 40% ~17s          
   |+++++++++++++++++++++                             | 41% ~16s          
   |+++++++++++++++++++++                             | 42% ~16s          
   |++++++++++++++++++++++                            | 43% ~16s          
   |++++++++++++++++++++++                            | 44% ~15s          
   |+++++++++++++++++++++++                           | 45% ~15s          
   |+++++++++++++++++++++++                           | 46% ~15s          
   |++++++++++++++++++++++++                          | 47% ~15s          
   |++++++++++++++++++++++++                          | 48% ~14s          
   |+++++++++++++++++++++++++                         | 49% ~14s          
   |+++++++++++++++++++++++++                         | 50% ~14s          
   |++++++++++++++++++++++++++                        | 51% ~13s          
   |+++++++++++++++++++++++++++                       | 52% ~13s          
   |+++++++++++++++++++++++++++                       | 53% ~13s          
   |++++++++++++++++++++++++++++                      | 54% ~13s          
   |++++++++++++++++++++++++++++                      | 55% ~12s          
   |+++++++++++++++++++++++++++++                     | 56% ~12s          
   |+++++++++++++++++++++++++++++                     | 57% ~12s          
   |++++++++++++++++++++++++++++++                    | 58% ~11s          
   |++++++++++++++++++++++++++++++                    | 59% ~11s          
   |+++++++++++++++++++++++++++++++                   | 60% ~11s          
   |+++++++++++++++++++++++++++++++                   | 61% ~11s          
   |++++++++++++++++++++++++++++++++                  | 62% ~10s          
   |++++++++++++++++++++++++++++++++                  | 63% ~10s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~10s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~09s          
   |++++++++++++++++++++++++++++++++++                | 66% ~09s          
   |++++++++++++++++++++++++++++++++++                | 67% ~09s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~09s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~08s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~08s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~08s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~07s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~07s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~07s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~07s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~06s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~06s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~06s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 27s
E15E16P1P4_wt_res14_3over1
write.table(E15E16P1P4_wt_res14_3over1,"E15E16P1P4_wt_res14_3over1.txt",sep="\t")
E15E16P1P4_wt_res14_1over3<-FindMarkers(seurat_E15E16P1P4_wt,ident.1=c(1),ident.2 = c(3),only.pos = TRUE)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~15s          
   |++                                                | 2 % ~14s          
   |++                                                | 3 % ~14s          
   |+++                                               | 5 % ~14s          
   |+++                                               | 6 % ~14s          
   |++++                                              | 7 % ~14s          
   |++++                                              | 8 % ~14s          
   |+++++                                             | 9 % ~14s          
   |++++++                                            | 10% ~13s          
   |++++++                                            | 11% ~13s          
   |+++++++                                           | 12% ~13s          
   |+++++++                                           | 14% ~13s          
   |++++++++                                          | 15% ~13s          
   |++++++++                                          | 16% ~12s          
   |+++++++++                                         | 17% ~12s          
   |++++++++++                                        | 18% ~12s          
   |++++++++++                                        | 19% ~12s          
   |+++++++++++                                       | 20% ~12s          
   |+++++++++++                                       | 22% ~12s          
   |++++++++++++                                      | 23% ~11s          
   |++++++++++++                                      | 24% ~11s          
   |+++++++++++++                                     | 25% ~11s          
   |++++++++++++++                                    | 26% ~11s          
   |++++++++++++++                                    | 27% ~11s          
   |+++++++++++++++                                   | 28% ~11s          
   |+++++++++++++++                                   | 30% ~10s          
   |++++++++++++++++                                  | 31% ~10s          
   |++++++++++++++++                                  | 32% ~10s          
   |+++++++++++++++++                                 | 33% ~10s          
   |++++++++++++++++++                                | 34% ~10s          
   |++++++++++++++++++                                | 35% ~09s          
   |+++++++++++++++++++                               | 36% ~09s          
   |+++++++++++++++++++                               | 38% ~09s          
   |++++++++++++++++++++                              | 39% ~09s          
   |++++++++++++++++++++                              | 40% ~09s          
   |+++++++++++++++++++++                             | 41% ~09s          
   |++++++++++++++++++++++                            | 42% ~09s          
   |++++++++++++++++++++++                            | 43% ~08s          
   |+++++++++++++++++++++++                           | 44% ~08s          
   |+++++++++++++++++++++++                           | 45% ~08s          
   |++++++++++++++++++++++++                          | 47% ~08s          
   |++++++++++++++++++++++++                          | 48% ~08s          
   |+++++++++++++++++++++++++                         | 49% ~08s          
   |+++++++++++++++++++++++++                         | 50% ~07s          
   |++++++++++++++++++++++++++                        | 51% ~07s          
   |+++++++++++++++++++++++++++                       | 52% ~07s          
   |+++++++++++++++++++++++++++                       | 53% ~07s          
   |++++++++++++++++++++++++++++                      | 55% ~07s          
   |++++++++++++++++++++++++++++                      | 56% ~07s          
   |+++++++++++++++++++++++++++++                     | 57% ~06s          
   |+++++++++++++++++++++++++++++                     | 58% ~06s          
   |++++++++++++++++++++++++++++++                    | 59% ~06s          
   |+++++++++++++++++++++++++++++++                   | 60% ~06s          
   |+++++++++++++++++++++++++++++++                   | 61% ~06s          
   |++++++++++++++++++++++++++++++++                  | 62% ~06s          
   |++++++++++++++++++++++++++++++++                  | 64% ~05s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~05s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~05s          
   |++++++++++++++++++++++++++++++++++                | 67% ~05s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~05s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~05s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~04s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~04s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~04s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~04s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~04s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~04s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~03s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~03s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 15s
E15E16P1P4_wt_res14_1over3
write.table(E15E16P1P4_wt_res14_1over3,"E15E16P1P4_wt_res14_1over3.txt",sep="\t")
E15E16P1P4_wt_res14_29over1<-FindMarkers(seurat_E15E16P1P4_wt,ident.1=c(29),ident.2 = c(1),only.pos = TRUE)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~10s          
   |++                                                | 2 % ~09s          
   |++                                                | 3 % ~09s          
   |+++                                               | 4 % ~09s          
   |+++                                               | 5 % ~09s          
   |++++                                              | 6 % ~09s          
   |++++                                              | 8 % ~09s          
   |+++++                                             | 9 % ~09s          
   |+++++                                             | 10% ~09s          
   |++++++                                            | 11% ~09s          
   |++++++                                            | 12% ~08s          
   |+++++++                                           | 13% ~08s          
   |+++++++                                           | 14% ~08s          
   |++++++++                                          | 15% ~08s          
   |+++++++++                                         | 16% ~08s          
   |+++++++++                                         | 17% ~08s          
   |++++++++++                                        | 18% ~08s          
   |++++++++++                                        | 19% ~08s          
   |+++++++++++                                       | 20% ~08s          
   |+++++++++++                                       | 22% ~08s          
   |++++++++++++                                      | 23% ~07s          
   |++++++++++++                                      | 24% ~07s          
   |+++++++++++++                                     | 25% ~07s          
   |+++++++++++++                                     | 26% ~07s          
   |++++++++++++++                                    | 27% ~07s          
   |++++++++++++++                                    | 28% ~07s          
   |+++++++++++++++                                   | 29% ~07s          
   |++++++++++++++++                                  | 30% ~07s          
   |++++++++++++++++                                  | 31% ~07s          
   |+++++++++++++++++                                 | 32% ~06s          
   |+++++++++++++++++                                 | 33% ~06s          
   |++++++++++++++++++                                | 34% ~06s          
   |++++++++++++++++++                                | 35% ~06s          
   |+++++++++++++++++++                               | 37% ~06s          
   |+++++++++++++++++++                               | 38% ~06s          
   |++++++++++++++++++++                              | 39% ~06s          
   |++++++++++++++++++++                              | 40% ~06s          
   |+++++++++++++++++++++                             | 41% ~06s          
   |+++++++++++++++++++++                             | 42% ~06s          
   |++++++++++++++++++++++                            | 43% ~05s          
   |+++++++++++++++++++++++                           | 44% ~05s          
   |+++++++++++++++++++++++                           | 45% ~05s          
   |++++++++++++++++++++++++                          | 46% ~05s          
   |++++++++++++++++++++++++                          | 47% ~05s          
   |+++++++++++++++++++++++++                         | 48% ~05s          
   |+++++++++++++++++++++++++                         | 49% ~05s          
   |++++++++++++++++++++++++++                        | 51% ~05s          
   |++++++++++++++++++++++++++                        | 52% ~05s          
   |+++++++++++++++++++++++++++                       | 53% ~05s          
   |+++++++++++++++++++++++++++                       | 54% ~04s          
   |++++++++++++++++++++++++++++                      | 55% ~04s          
   |++++++++++++++++++++++++++++                      | 56% ~04s          
   |+++++++++++++++++++++++++++++                     | 57% ~04s          
   |++++++++++++++++++++++++++++++                    | 58% ~04s          
   |++++++++++++++++++++++++++++++                    | 59% ~04s          
   |+++++++++++++++++++++++++++++++                   | 60% ~04s          
   |+++++++++++++++++++++++++++++++                   | 61% ~04s          
   |++++++++++++++++++++++++++++++++                  | 62% ~04s          
   |++++++++++++++++++++++++++++++++                  | 63% ~03s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~03s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~03s          
   |++++++++++++++++++++++++++++++++++                | 67% ~03s          
   |++++++++++++++++++++++++++++++++++                | 68% ~03s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~03s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~03s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~03s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~03s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~02s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~02s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~02s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~02s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~02s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 09s
E15E16P1P4_wt_res14_29over1

df_3_1_29_wt<-FetchData(seurat_E15E16P1P4_wt,c("Trp63","Cldn6","Nnat","Id2","Id3","Wnt7b","Wnt4","Krt5","Krt15","Aqp3","Aqp4","Aqp5","Rpl6l","Rpl9-ps6","Rpl13-ps3","age","res.1.4"))
df_3_1_29_wt<-df_3_1_29_wt[order(factor(df_3_1_29_wt$res.1.4,levels=c("3","1","29")),df_3_1_29_wt$age),]
age<-substr(rownames(df_3_1_29_wt[df_3_1_29_wt$res.1.4 %in% c(3,1,29),]),1,3)
table(seurat_E15E16P1P4_wt@meta.data$res.1.4)

   0    1   10   11   12   13   14   15   16   17   18   19    2   20   21   22   23   24   25   26   27 
1347 1324  557  552  531  506  493  474  462  448  395  388 1094  362  342  317  272  245  222  221  209 
  28   29    3   30   31   32   33    4    5    6    7    8    9 
 196  149 1018  137  134   89   88  916  744  733  635  608  601 
library(gplots)
heatmap.2(t(as.matrix(df_3_1_29_wt[df_3_1_29_wt$res.1.4 %in% c(3,1,29),1:15])),col=plasma(500), scale="row",Colv = NA, Rowv = NA,ColSideColors=c("#006d2c","#2ca25f","#66c2a4","#99d8c9")[as.numeric(as.factor(age))],labCol =NA,density.info="none",trace="none",dendrogram='none',srtCol=45,cexCol = 1,colsep=c(1018,2342),breaks=seq(-3,3,length.out=501))
Using scale="row" or scale="column" when breaks arespecified can produce unpredictable results.Please consider using only one or the other.
par(lend = 1)           # square line ends for the color legend
legend("left",      # location of the legend on the heatmap plot
    legend = c("E15", "E16", "P1","P4"), # category labels
    col = c("#006d2c","#2ca25f","#66c2a4","#99d8c9"),  # color key
    lty= 1,             # line style
    lwd = 10            # line width
)

library(gplots)
heatmap.2(t(as.matrix(df_3_1_29_wt[df_3_1_29_wt$res.1.4 %in% c(3,1,29),1:15])),col=cividis(500), scale="row",Colv = NA, Rowv = NA,ColSideColors=c("#006d2c","#2ca25f","#66c2a4","#99d8c9")[as.numeric(as.factor(age))],labCol =NA,density.info="none",trace="none",dendrogram='none',srtCol=45,cexCol = 1,colsep=c(1018,2342),breaks=seq(-3,3,length.out=501))
Using scale="row" or scale="column" when breaks arespecified can produce unpredictable results.Please consider using only one or the other.
par(lend = 1)           # square line ends for the color legend
legend("left",      # location of the legend on the heatmap plot
    legend = c("E15", "E16", "P1","P4"), # category labels
    col = c("#006d2c","#2ca25f","#66c2a4","#99d8c9"),  # color key
    lty= 1,             # line style
    lwd = 10            # line width
)

pdf(file = paste("Manuscript/heatmap/","basal_dev",".pdf", sep = ""), width = 7, height = 3)
heatmap.2(t(as.matrix(df_3_1_29_wt[df_3_1_29_wt$res.1.4 %in% c(3,1,29),1:15])),col=cividis(500), scale="row",Colv = NA, Rowv = NA,ColSideColors=c("#006d2c","#2ca25f","#66c2a4","#99d8c9")[as.numeric(as.factor(age))],labCol =NA,density.info="none",trace="none",dendrogram='none',srtCol=45,cexCol = 1,colsep=c(1018,2342),breaks=seq(-3,3,length.out=501))
Using scale="row" or scale="column" when breaks arespecified can produce unpredictable results.Please consider using only one or the other.Error in plot.new() : figure margins too large
ggplot(data=seurat_E15E16P1P4_wt@meta.data[seurat_E15E16P1P4_wt@meta.data$res.1.4 %in% c(3,1,29),],aes(res.1.4,fill=age))+ 
    geom_bar(position="fill")+ theme(axis.text.x = element_text(angle = 45, hjust = 1))+
  scale_fill_manual(values = c("#006d2c","#2ca25f","#66c2a4","#99d8c9"))+scale_x_discrete(limits=c("3","1","29"))

ciliated cells across time:
E15E16P1P4_wt_res14_27over20<-FindMarkers(seurat_E15E16P1P4_wt,ident.1=c(27),ident.2 = c(20),only.pos = TRUE)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~12s          
   |++                                                | 2 % ~12s          
   |++                                                | 3 % ~11s          
   |+++                                               | 4 % ~11s          
   |+++                                               | 5 % ~11s          
   |++++                                              | 6 % ~11s          
   |++++                                              | 8 % ~11s          
   |+++++                                             | 9 % ~11s          
   |+++++                                             | 10% ~11s          
   |++++++                                            | 11% ~11s          
   |++++++                                            | 12% ~10s          
   |+++++++                                           | 13% ~10s          
   |+++++++                                           | 14% ~10s          
   |++++++++                                          | 15% ~10s          
   |+++++++++                                         | 16% ~10s          
   |+++++++++                                         | 17% ~10s          
   |++++++++++                                        | 18% ~10s          
   |++++++++++                                        | 19% ~10s          
   |+++++++++++                                       | 20% ~10s          
   |+++++++++++                                       | 22% ~09s          
   |++++++++++++                                      | 23% ~09s          
   |++++++++++++                                      | 24% ~09s          
   |+++++++++++++                                     | 25% ~09s          
   |+++++++++++++                                     | 26% ~09s          
   |++++++++++++++                                    | 27% ~09s          
   |++++++++++++++                                    | 28% ~09s          
   |+++++++++++++++                                   | 29% ~09s          
   |++++++++++++++++                                  | 30% ~09s          
   |++++++++++++++++                                  | 31% ~09s          
   |+++++++++++++++++                                 | 32% ~08s          
   |+++++++++++++++++                                 | 33% ~08s          
   |++++++++++++++++++                                | 34% ~08s          
   |++++++++++++++++++                                | 35% ~08s          
   |+++++++++++++++++++                               | 37% ~08s          
   |+++++++++++++++++++                               | 38% ~08s          
   |++++++++++++++++++++                              | 39% ~08s          
   |++++++++++++++++++++                              | 40% ~07s          
   |+++++++++++++++++++++                             | 41% ~07s          
   |+++++++++++++++++++++                             | 42% ~07s          
   |++++++++++++++++++++++                            | 43% ~07s          
   |+++++++++++++++++++++++                           | 44% ~07s          
   |+++++++++++++++++++++++                           | 45% ~07s          
   |++++++++++++++++++++++++                          | 46% ~07s          
   |++++++++++++++++++++++++                          | 47% ~06s          
   |+++++++++++++++++++++++++                         | 48% ~06s          
   |+++++++++++++++++++++++++                         | 49% ~06s          
   |++++++++++++++++++++++++++                        | 51% ~06s          
   |++++++++++++++++++++++++++                        | 52% ~06s          
   |+++++++++++++++++++++++++++                       | 53% ~06s          
   |+++++++++++++++++++++++++++                       | 54% ~06s          
   |++++++++++++++++++++++++++++                      | 55% ~05s          
   |++++++++++++++++++++++++++++                      | 56% ~05s          
   |+++++++++++++++++++++++++++++                     | 57% ~05s          
   |++++++++++++++++++++++++++++++                    | 58% ~05s          
   |++++++++++++++++++++++++++++++                    | 59% ~05s          
   |+++++++++++++++++++++++++++++++                   | 60% ~05s          
   |+++++++++++++++++++++++++++++++                   | 61% ~05s          
   |++++++++++++++++++++++++++++++++                  | 62% ~05s          
   |++++++++++++++++++++++++++++++++                  | 63% ~04s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~04s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~04s          
   |++++++++++++++++++++++++++++++++++                | 67% ~04s          
   |++++++++++++++++++++++++++++++++++                | 68% ~04s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~04s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~04s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~04s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~03s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~03s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~03s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~03s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~03s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~03s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 12s
E15E16P1P4_wt_res14_27over20
write.table(E15E16P1P4_wt_res14_27over20,"E15E16P1P4_wt_res14_27over20.txt",sep="\t")
E15E16P1P4_wt_res14_20over27<-FindMarkers(seurat_E15E16P1P4_wt,ident.1=c(20),ident.2 = c(27),only.pos = TRUE)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~13s          
   |++                                                | 2 % ~13s          
   |++                                                | 3 % ~11s          
   |+++                                               | 4 % ~10s          
   |+++                                               | 5 % ~10s          
   |++++                                              | 6 % ~10s          
   |++++                                              | 8 % ~10s          
   |+++++                                             | 9 % ~09s          
   |+++++                                             | 10% ~09s          
   |++++++                                            | 11% ~09s          
   |++++++                                            | 12% ~09s          
   |+++++++                                           | 13% ~08s          
   |+++++++                                           | 14% ~09s          
   |++++++++                                          | 15% ~08s          
   |+++++++++                                         | 16% ~08s          
   |+++++++++                                         | 17% ~08s          
   |++++++++++                                        | 18% ~08s          
   |++++++++++                                        | 19% ~08s          
   |+++++++++++                                       | 20% ~08s          
   |+++++++++++                                       | 22% ~08s          
   |++++++++++++                                      | 23% ~07s          
   |++++++++++++                                      | 24% ~07s          
   |+++++++++++++                                     | 25% ~07s          
   |+++++++++++++                                     | 26% ~07s          
   |++++++++++++++                                    | 27% ~07s          
   |++++++++++++++                                    | 28% ~07s          
   |+++++++++++++++                                   | 29% ~07s          
   |++++++++++++++++                                  | 30% ~07s          
   |++++++++++++++++                                  | 31% ~07s          
   |+++++++++++++++++                                 | 32% ~06s          
   |+++++++++++++++++                                 | 33% ~06s          
   |++++++++++++++++++                                | 34% ~06s          
   |++++++++++++++++++                                | 35% ~06s          
   |+++++++++++++++++++                               | 37% ~06s          
   |+++++++++++++++++++                               | 38% ~06s          
   |++++++++++++++++++++                              | 39% ~06s          
   |++++++++++++++++++++                              | 40% ~06s          
   |+++++++++++++++++++++                             | 41% ~06s          
   |+++++++++++++++++++++                             | 42% ~05s          
   |++++++++++++++++++++++                            | 43% ~05s          
   |+++++++++++++++++++++++                           | 44% ~05s          
   |+++++++++++++++++++++++                           | 45% ~05s          
   |++++++++++++++++++++++++                          | 46% ~05s          
   |++++++++++++++++++++++++                          | 47% ~05s          
   |+++++++++++++++++++++++++                         | 48% ~05s          
   |+++++++++++++++++++++++++                         | 49% ~05s          
   |++++++++++++++++++++++++++                        | 51% ~05s          
   |++++++++++++++++++++++++++                        | 52% ~04s          
   |+++++++++++++++++++++++++++                       | 53% ~04s          
   |+++++++++++++++++++++++++++                       | 54% ~04s          
   |++++++++++++++++++++++++++++                      | 55% ~04s          
   |++++++++++++++++++++++++++++                      | 56% ~04s          
   |+++++++++++++++++++++++++++++                     | 57% ~04s          
   |++++++++++++++++++++++++++++++                    | 58% ~04s          
   |++++++++++++++++++++++++++++++                    | 59% ~04s          
   |+++++++++++++++++++++++++++++++                   | 60% ~04s          
   |+++++++++++++++++++++++++++++++                   | 61% ~04s          
   |++++++++++++++++++++++++++++++++                  | 62% ~04s          
   |++++++++++++++++++++++++++++++++                  | 63% ~03s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~03s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~03s          
   |++++++++++++++++++++++++++++++++++                | 67% ~03s          
   |++++++++++++++++++++++++++++++++++                | 68% ~03s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~03s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~03s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~03s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~03s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~02s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~02s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~02s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~02s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~02s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 09s
E15E16P1P4_wt_res14_20over27
write.table(E15E16P1P4_wt_res14_20over27,"E15E16P1P4_wt_res14_20over27.txt",sep="\t")

table(seurat_E15E16P1P4_wt@meta.data$res.1.4)

   0    1   10   11   12   13   14   15   16   17   18   19    2   20   21   22   23   24   25   26   27 
1347 1324  557  552  531  506  493  474  462  448  395  388 1094  362  342  317  272  245  222  221  209 
  28   29    3   30   31   32   33    4    5    6    7    8    9 
 196  149 1018  137  134   89   88  916  744  733  635  608  601 
df_20_27_wt<-FetchData(seurat_E15E16P1P4_wt,c("Foxj1","Lrrc23","Ccdc67","Cep152","Plk4","Ccna1","Ccno","Cdc20b","Cdc20","Hyls1","Mcidas","Smim24","Ift80","Prr18","Sntn","Stmnd1","Ldlrad1","Cdhr4","Cdhr3","Slc23a2","Ly6a","Ly6c1","Adam8","Cxcl17","Ifitm1","age","res.1.4"))
df_20_27_wt<-df_20_27_wt[order(df_20_27_wt$res.1.4,df_20_27_wt$age),]
age<-substr(rownames(df_20_27_wt[df_20_27_wt$res.1.4 %in% c(20,27),]),1,3)
library(gplots)
heatmap.2(t(as.matrix(df_20_27_wt[df_20_27_wt$res.1.4 %in% c(20,27),1:25])),col=plasma(500), scale="row",Colv = NA, Rowv = NA,ColSideColors=c("#006d2c","#2ca25f","#66c2a4","#99d8c9")[as.numeric(as.factor(age))],labCol =NA,density.info="none",trace="none",dendrogram='none',srtCol=45,cexCol = 1,colsep=c(362),breaks=seq(-3,3,length.out=501))
Using scale="row" or scale="column" when breaks arespecified can produce unpredictable results.Please consider using only one or the other.
par(lend = 1)           # square line ends for the color legend
legend("left",      # location of the legend on the heatmap plot
    legend = c("E15", "E16", "P1","P4"), # category labels
    col = c("#006d2c","#2ca25f","#66c2a4","#99d8c9"),  # color key
    lty= 1,             # line style
    lwd = 10            # line width
)

library(gplots)
heatmap.2(t(as.matrix(df_20_27_wt[df_20_27_wt$res.1.4 %in% c(20,27),1:22])),col=cividis(500), scale="row",Colv = NA, Rowv = NA,ColSideColors=c("#006d2c","#2ca25f","#66c2a4","#99d8c9")[as.numeric(as.factor(age))],labCol =NA,density.info="none",trace="none",dendrogram='none',srtCol=45,cexCol = 1,colsep=c(362),breaks=seq(-3,3,length.out=501))
Using scale="row" or scale="column" when breaks arespecified can produce unpredictable results.Please consider using only one or the other.
par(lend = 1)           # square line ends for the color legend
legend("left",      # location of the legend on the heatmap plot
    legend = c("E15", "E16", "P1","P4"), # category labels
    col = c("#006d2c","#2ca25f","#66c2a4","#99d8c9"),  # color key
    lty= 1,             # line style
    lwd = 10            # line width
)

table(seurat_E15E16P1P4_wt@meta.data$res.1.4[seurat_E15E16P1P4_wt@meta.data$res.1.4 %in% c(20,27)],seurat_E15E16P1P4_wt@meta.data$age[seurat_E15E16P1P4_wt@meta.data$res.1.4 %in% c(20,27)])
prop.table(table(seurat_E15E16P1P4_wt@meta.data$age[seurat_E15E16P1P4_wt@meta.data$res.1.4 %in% c(20,27)],seurat_E15E16P1P4_wt@meta.data$res.1.4[seurat_E15E16P1P4_wt@meta.data$res.1.4 %in% c(20,27)]),1)
     
              20         27
  E15 1.00000000 0.00000000
  E16 0.98979592 0.01020408
  P1  0.19178082 0.80821918
  P4  0.27586207 0.72413793

secretory cells across time:
E15E16P1P4_wt_res14_2over7<-FindMarkers(seurat_E15E16P1P4_wt,ident.1=c(2),ident.2 = c(7),only.pos = TRUE)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~16s          
   |++                                                | 2 % ~16s          
   |++                                                | 3 % ~16s          
   |+++                                               | 4 % ~15s          
   |+++                                               | 5 % ~15s          
   |++++                                              | 6 % ~15s          
   |++++                                              | 7 % ~15s          
   |+++++                                             | 8 % ~15s          
   |+++++                                             | 9 % ~14s          
   |++++++                                            | 10% ~14s          
   |++++++                                            | 11% ~14s          
   |+++++++                                           | 12% ~14s          
   |+++++++                                           | 13% ~14s          
   |++++++++                                          | 14% ~14s          
   |++++++++                                          | 15% ~14s          
   |+++++++++                                         | 16% ~13s          
   |+++++++++                                         | 17% ~13s          
   |++++++++++                                        | 18% ~13s          
   |++++++++++                                        | 19% ~13s          
   |+++++++++++                                       | 20% ~13s          
   |+++++++++++                                       | 21% ~13s          
   |++++++++++++                                      | 22% ~12s          
   |++++++++++++                                      | 23% ~12s          
   |+++++++++++++                                     | 24% ~12s          
   |+++++++++++++                                     | 25% ~12s          
   |++++++++++++++                                    | 26% ~12s          
   |++++++++++++++                                    | 27% ~12s          
   |+++++++++++++++                                   | 28% ~11s          
   |+++++++++++++++                                   | 29% ~11s          
   |++++++++++++++++                                  | 30% ~11s          
   |++++++++++++++++                                  | 31% ~11s          
   |+++++++++++++++++                                 | 32% ~11s          
   |+++++++++++++++++                                 | 33% ~11s          
   |++++++++++++++++++                                | 34% ~10s          
   |++++++++++++++++++                                | 35% ~10s          
   |+++++++++++++++++++                               | 36% ~10s          
   |+++++++++++++++++++                               | 37% ~10s          
   |++++++++++++++++++++                              | 38% ~10s          
   |++++++++++++++++++++                              | 39% ~10s          
   |+++++++++++++++++++++                             | 40% ~10s          
   |+++++++++++++++++++++                             | 41% ~09s          
   |++++++++++++++++++++++                            | 42% ~09s          
   |++++++++++++++++++++++                            | 43% ~09s          
   |+++++++++++++++++++++++                           | 44% ~09s          
   |+++++++++++++++++++++++                           | 45% ~09s          
   |++++++++++++++++++++++++                          | 46% ~09s          
   |++++++++++++++++++++++++                          | 47% ~08s          
   |+++++++++++++++++++++++++                         | 48% ~08s          
   |+++++++++++++++++++++++++                         | 49% ~08s          
   |++++++++++++++++++++++++++                        | 51% ~08s          
   |++++++++++++++++++++++++++                        | 52% ~08s          
   |+++++++++++++++++++++++++++                       | 53% ~08s          
   |+++++++++++++++++++++++++++                       | 54% ~07s          
   |++++++++++++++++++++++++++++                      | 55% ~07s          
   |++++++++++++++++++++++++++++                      | 56% ~07s          
   |+++++++++++++++++++++++++++++                     | 57% ~07s          
   |+++++++++++++++++++++++++++++                     | 58% ~07s          
   |++++++++++++++++++++++++++++++                    | 59% ~07s          
   |++++++++++++++++++++++++++++++                    | 60% ~06s          
   |+++++++++++++++++++++++++++++++                   | 61% ~06s          
   |+++++++++++++++++++++++++++++++                   | 62% ~06s          
   |++++++++++++++++++++++++++++++++                  | 63% ~06s          
   |++++++++++++++++++++++++++++++++                  | 64% ~06s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~06s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~05s          
   |++++++++++++++++++++++++++++++++++                | 67% ~05s          
   |++++++++++++++++++++++++++++++++++                | 68% ~05s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~05s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~05s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~05s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~05s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~04s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~04s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~04s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~04s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~04s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~04s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~03s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 16s
E15E16P1P4_wt_res14_2over7
E15E16P1P4_wt_res14_7over2<-FindMarkers(seurat_E15E16P1P4_wt,ident.1=c(7),ident.2 = c(2),only.pos = TRUE)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~06s          
   |++                                                | 2 % ~06s          
   |++                                                | 3 % ~05s          
   |+++                                               | 4 % ~05s          
   |+++                                               | 5 % ~05s          
   |++++                                              | 6 % ~05s          
   |++++                                              | 8 % ~05s          
   |+++++                                             | 9 % ~05s          
   |+++++                                             | 10% ~05s          
   |++++++                                            | 11% ~05s          
   |++++++                                            | 12% ~05s          
   |+++++++                                           | 13% ~05s          
   |+++++++                                           | 14% ~05s          
   |++++++++                                          | 15% ~05s          
   |+++++++++                                         | 16% ~05s          
   |+++++++++                                         | 17% ~05s          
   |++++++++++                                        | 18% ~05s          
   |++++++++++                                        | 19% ~04s          
   |+++++++++++                                       | 20% ~04s          
   |+++++++++++                                       | 22% ~04s          
   |++++++++++++                                      | 23% ~04s          
   |++++++++++++                                      | 24% ~04s          
   |+++++++++++++                                     | 25% ~04s          
   |+++++++++++++                                     | 26% ~04s          
   |++++++++++++++                                    | 27% ~04s          
   |++++++++++++++                                    | 28% ~04s          
   |+++++++++++++++                                   | 29% ~04s          
   |++++++++++++++++                                  | 30% ~04s          
   |++++++++++++++++                                  | 31% ~04s          
   |+++++++++++++++++                                 | 32% ~04s          
   |+++++++++++++++++                                 | 33% ~04s          
   |++++++++++++++++++                                | 34% ~04s          
   |++++++++++++++++++                                | 35% ~04s          
   |+++++++++++++++++++                               | 37% ~04s          
   |+++++++++++++++++++                               | 38% ~03s          
   |++++++++++++++++++++                              | 39% ~03s          
   |++++++++++++++++++++                              | 40% ~03s          
   |+++++++++++++++++++++                             | 41% ~03s          
   |+++++++++++++++++++++                             | 42% ~03s          
   |++++++++++++++++++++++                            | 43% ~03s          
   |+++++++++++++++++++++++                           | 44% ~03s          
   |+++++++++++++++++++++++                           | 45% ~03s          
   |++++++++++++++++++++++++                          | 46% ~03s          
   |++++++++++++++++++++++++                          | 47% ~03s          
   |+++++++++++++++++++++++++                         | 48% ~03s          
   |+++++++++++++++++++++++++                         | 49% ~03s          
   |++++++++++++++++++++++++++                        | 51% ~03s          
   |++++++++++++++++++++++++++                        | 52% ~03s          
   |+++++++++++++++++++++++++++                       | 53% ~03s          
   |+++++++++++++++++++++++++++                       | 54% ~03s          
   |++++++++++++++++++++++++++++                      | 55% ~03s          
   |++++++++++++++++++++++++++++                      | 56% ~02s          
   |+++++++++++++++++++++++++++++                     | 57% ~02s          
   |++++++++++++++++++++++++++++++                    | 58% ~02s          
   |++++++++++++++++++++++++++++++                    | 59% ~02s          
   |+++++++++++++++++++++++++++++++                   | 60% ~02s          
   |+++++++++++++++++++++++++++++++                   | 61% ~02s          
   |++++++++++++++++++++++++++++++++                  | 62% ~02s          
   |++++++++++++++++++++++++++++++++                  | 63% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~02s          
   |++++++++++++++++++++++++++++++++++                | 67% ~02s          
   |++++++++++++++++++++++++++++++++++                | 68% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~02s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 06s
E15E16P1P4_wt_res14_7over2

df_2_7_wt<-FetchData(seurat_E15E16P1P4_wt,c("Spdef","Creb3l1","Cited1","Dnajb9","Klk10","Klk13","Klk11","Muc5b","Muc1","Muc4","Gp2","Tff2","Sftpd","Scgb1a1","age","res.1.4"))
df_2_7_wt<-df_2_7_wt[order(df_2_7_wt$res.1.4,df_2_7_wt$age),]
age<-substr(rownames(df_2_7_wt[df_2_7_wt$res.1.4 %in% c(2,7),]),1,3)
table(seurat_E15E16P1P4_wt@meta.data$res.1.4)

   0    1   10   11   12   13   14   15   16   17   18   19    2   20   21   22   23   24   25   26   27 
1347 1324  557  552  531  506  493  474  462  448  395  388 1094  362  342  317  272  245  222  221  209 
  28   29    3   30   31   32   33    4    5    6    7    8    9 
 196  149 1018  137  134   89   88  916  744  733  635  608  601 
library(gplots)
heatmap.2(t(as.matrix(df_2_7_wt[df_2_7_wt$res.1.4 %in% c(2,7),1:14])),col=plasma(500), scale="row",Colv = NA, Rowv = NA,ColSideColors=c("#2ca25f","#66c2a4","#99d8c9")[as.numeric(as.factor(age))],labCol =NA,density.info="none",trace="none",dendrogram='none',srtCol=45,cexCol = 1,colsep=c(1094),breaks=seq(-3,3,length.out=501))
Using scale="row" or scale="column" when breaks arespecified can produce unpredictable results.Please consider using only one or the other.
par(lend = 1)           # square line ends for the color legend
legend("left",      # location of the legend on the heatmap plot
    legend = c( "E16", "P1","P4"), # category labels
    col = c("#2ca25f","#66c2a4","#99d8c9"),  # color key
    lty= 1,             # line style
    lwd = 10            # line width
)

library(gplots)
heatmap.2(t(as.matrix(df_2_7_wt[df_2_7_wt$res.1.4 %in% c(2,7),1:14])),col=cividis(500), scale="row",Colv = NA, Rowv = NA,ColSideColors=c("#2ca25f","#66c2a4","#99d8c9")[as.numeric(as.factor(age))],labCol =NA,density.info="none",trace="none",dendrogram='none',srtCol=45,cexCol = 1,colsep=c(1094),breaks=seq(-3,3,length.out=501))
Using scale="row" or scale="column" when breaks arespecified can produce unpredictable results.Please consider using only one or the other.
par(lend = 1)           # square line ends for the color legend
legend("left",      # location of the legend on the heatmap plot
    legend = c( "E16", "P1","P4"), # category labels
    col = c("#2ca25f","#66c2a4","#99d8c9"),  # color key
    lty= 1,             # line style
    lwd = 10            # line width
)

ggplot(data=seurat_E15E16P1P4_wt@meta.data[seurat_E15E16P1P4_wt@meta.data$res.1.4 %in% c(2,7),],aes(res.1.4,fill=age))+ 
    geom_bar(position="fill")+ theme(axis.text.x = element_text(angle = 45, hjust = 1))+ 
  scale_x_discrete(limits=c("2","7"))+
  scale_fill_manual(values = c("#2ca25f","#66c2a4","#99d8c9"))

seurat_E15E16P1P4_wt<-SetAllIdent(object = seurat_E15E16P1P4_wt, id = "res.1.4")
VlnPlot(object = seurat_E15E16P1P4_wt, features.plot = c("Foxj1","Mcidas","Cdhr3","Creb3l1","Spdef","Gp2"), nCol = 3,x.lab.rot = T,point.size.use = 0.1,use.raw=F,group.by="specific_type",ident.include =c(2,7,20,27,28) )+scale_fill_manual(values=c('#EC906B', '#8E9FC5', '#AFD467'
))

immune response:
Toll like receptors and signaling:

CLRs (C-type lectin domain):

NLR:

RLR:

df_all_wt<-FetchData(seurat_E15E16P1P4_wt,c("Lbp","Cd14","Tlr4","Tlr2","Myd88","Ticam1","Itln1","Reg3g","Lgals3","Nod1","Nod2","Nlrp6","Ddx58","Ifih1","Dhx58","Sucnr1","res.1.4","age","seq_group","cell_type","Foxj1","Spdef","Foxa3","Creb3l1","Gp2","Tff2","Scgb1a1","Cftr","Foxi1","Gja1","Muc1","Muc4","Muc16","Muc20","Muc5b","Muc5ac","Muc2","Defb1","Lyz2","Ltf","Sftpa1","Sftpd","Sftpb","Slpi","Lcn2","Pigr","Chil4","Ccl5","Cxcl10","Cxcl2","Cxcl1","Pf4","Cxcl12","Cxcl14","Cxcl15","Cxcl16","Cxcl17","Ccl2","Ccl7","Ccl17","Ccl20","Ccl21a","Ccl25","Ccl27a","Ccl28","Cx3cl1","Il10","Tnf","S100a8","S100a9","Il6","Il18","Il1b","Il1rl1","Ccl11","Ccl24","Il33","Il25","Tslp","F2rl1","Retnla","Alox15","Alox5","Gata2","Tgfb2","Tgfb1","Ormdl3","Ptges","Ptgds","Ptgs2","Hpgds","Tbxas1","Areg","Il2","Il17b","Il17d","Il34","Il11","Il15","Ifnk","Ifnlr1","Ifkbiz","Ifkbia"))
Error in FetchData(seurat_E15E16P1P4_wt, c("Lbp", "Cd14", "Tlr4", "Tlr2",  : 
  Error: Ifkbiz not found
table(colnames(df_all_wt))

      age    Alox15     Alox5      Areg     Ccl11     Ccl17      Ccl2     Ccl20    Ccl21a     Ccl24     Ccl25    Ccl27a     Ccl28      Ccl5      Ccl7      Cd14 
        1         1         1         1         1         1         1         1         1         1         1         1         1         2         1         1 
cell_type      Cftr     Chil4   Creb3l1    Cx3cl1     Cxcl1    Cxcl10    Cxcl12    Cxcl14    Cxcl15    Cxcl16    Cxcl17     Cxcl2     Ddx58     Defb1     Dhx58 
        1         1         1         1         1         1         1         1         1         1         1         1         1         1         1         1 
    F2rl1     Foxa3     Foxi1     Foxj1     Gata2      Gja1       Gp2     Hpgds     Ifih1      Il10      Il18      Il1b    Il1rl1      Il25      Il33       Il6 
        1         1         1         1         1         1         1         1         1         1         1         1         1         1         1         1 
    Itln1       Lbp      Lcn2    Lgals3       Ltf      Lyz2      Muc1     Muc16      Muc2     Muc20      Muc4    Muc5ac     Muc5b     Myd88     Nlrp6      Nod1 
        1         1         1         1         1         1         1         1         1         1         1         1         1         1         1         1 
     Nod2    Ormdl3       Pf4      Pigr     Ptgds     Ptges     Ptgs2     Reg3g   res.1.4    Retnla    S100a8    S100a9   Scgb1a1 seq_group    Sftpa1     Sftpb 
        1         1         1         1         1         1         1         1         1         1         1         1         1         1         1         1 
    Sftpd      Slpi     Spdef    Sucnr1    Tbxas1      Tff2     Tgfb1     Tgfb2    Ticam1      Tlr2      Tlr4       Tnf      Tslp 
        1         1         1         1         1         1         1         1         1         1         1         1         1 
#for (i in c("Lbp","Cd14","Tlr4","Tlr2","Myd88","Ticam1","Itln1","Reg3g","Lgals3","Nod1","Nod2","Nlrp6","Ddx58","Ifih1","Dhx58","Sucnr1"))
#{
#pdf(file = paste("Manuscript/MicrobialSensing/",i,".pdf", sep = ""), width = 7, height = 3)
#print(ggplot(df_all_wt[(df_all_wt$specific_type %in% #c("Basal","Secretory","Ciliated","Transitional","CiliaSecretory","CyclingEpithelial")),],aes_string(x="age",y=i))+facet_grid(.~specific_type)+geom_dotplot(binaxis="y",aes(fill=age),binwidth=0.#01,stackdir="center",position=position_dodge(0.8), dotsize=0.8)+ stat_summary(aes(color=age),fun.data=mean_sdl, fun.args = list(mult=1), 
#                 geom="pointrange",position=position_dodge(0.7))+ theme(axis.text.x = element_text(angle = 45,hjust=1)))
#dev.off()
#}
Some categories of genes:
lipid synthetic enzymes or inhibitors: “Ormdl3”,“Ptges”,“Ptgds”,“Ptgs2”,“Hpgds”,“Hpgds”,“Ptgr2”,“Tbxas1”,“Alox5”,“Ptgdr”
known Th2 inducers, effectors, and mediators:“Il10”,“Tnf”,“S100a8”,“S100a9”,“Il6”,“Il18”,“Il1b”,“Il1rl1”,“Ccl11”,“Ccl24”,“Il33”,“Il25”,“Tslp”,“F2rl1”,“Retnla”,“Alox15”,“Alox5”,“Gata2”,“Tgfb2”,“Tgfb1”,“Ormdl3”,“Ptges”,“Ptgds”,“Ptgs2”,“Hpgds”,“Tbxas1”,“Areg”
chemokines: Pbpb not expressed, Ccl21c, Ccl21c.1, Cxcl11 not found in mm10.1.2.0. “Cxcl3”,“Cxcl2”,“Cxcl1”,“Pf4”,“Cxcl5”,“Cxcl9”,“Cxcl10”,“Cxcl12”,“Cxcl13”,“Cxcl14”,“Cxcl15”,“Cxcl16”,“Cxcl17”,“Ccl1”,“Ccl2”,“Ccl3”,“Ccl4”,“Ccl5”,“Ccl7”,“Ccl8”,“Ccl11”,“Ccl12”,“Ccl9”,“Ccl17”,“Ccl19”,“Ccl20”,“Ccl21a”,“Ccl21b.1”,“Ccl22”,“Ccl6”,“Ccl24”,“Ccl25”,“Ccl27a”,“Ccl27b”,“Ccl28”,“Xcl1”,“Cx3cl1”
expressed chemokines: “Ccl5”,“Cxcl10”,“Cxcl2”,“Cxcl1”,“Pf4”,“Cxcl12”,“Cxcl14”,“Cxcl15”,“Cxcl16”,“Cxcl17”,“Ccl2”,“Ccl7”,“Ccl17”,“Ccl20”,“Ccl21a”,“Ccl25”,“Ccl27a”,“Ccl28”,“Cx3cl1”
Interleukins (Il3,Il9,Il20,Il31 not expressed):“Il10”,“Il11”,“Il12a”,“Il12b”,“Il13”,“Il15”,“Il16”,“Il17a”,“Il17b”,“Il17c”,“Il17d”,“Il17f”,“Il18”,“Il19”,“Il2”,“Il21”,“Il22”,“Il24”,“Il25”,“Il27”,“Il33”,“Il34”,“Il4”,“Il5”,“Il6”,“Il7”,“Il1a”,“Il1b”
Antimicrobial effectors: “Muc1”,“Muc4”,“Muc16”,“Muc20”,“Muc5b”,“Muc5ac”,“Muc2”,“Defb1”,“Lyz2”,“Ltf”,“Sftpa1”,“Sftpd”,“Sftpb”,“Slpi”,“Lcn2”,“Pigr”,“Chil4”
known epithelial cytokines and mediators: “Il1a”,“Il25”,“Il33”,“Tslp”,“Csf2”,“Ccl5”,“Cxcl10”
Most interferons cannot be found in our dataset:

seurat_E15E16P1P4_wt@meta.data$type_age<-as.factor(paste(seurat_E15E16P1P4_wt@meta.data$cell_type,seurat_E15E16P1P4_wt@meta.data$age,sep="_"))
seurat_E15E16P1P4_wt@meta.data$specificType_age<-as.factor(paste(seurat_E15E16P1P4_wt@meta.data$specific_type,seurat_E15E16P1P4_wt@meta.data$age,sep="_"))

print(levels(seurat_E15E16P1P4_wt@ident))
 [1] "Basal_E15"                 "Basal_E16"                 "Basal_P1"                  "Basal_P4"                 
 [5] "Chondrocyte_E15"           "Chondrocyte_E16"           "Chondrocyte_P1"            "Chondrocyte_P4"           
 [9] "CiliaSecretory_E16"        "CiliaSecretory_P1"         "CiliaSecretory_P4"         "Ciliated_E15"             
[13] "Ciliated_E16"              "Ciliated_P1"               "Ciliated_P4"               "CyclingEpithelial_E15"    
[17] "CyclingEpithelial_E16"     "CyclingEpithelial_P1"      "CyclingEpithelial_P4"      "CyclingFibroblast_E15"    
[21] "CyclingFibroblast_E16"     "CyclingFibroblast_P1"      "CyclingFibroblast_P4"      "Doublet_E16"              
[25] "Doublet_P1"                "Fibroblast_E15"            "Fibroblast_E16"            "Fibroblast_P1"            
[29] "Fibroblast_P4"             "Immune_1_E15"              "Immune_1_E16"              "Immune_1_P1"              
[33] "Immune_1_P4"               "Immune_2_E15"              "Immune_2_E16"              "Immune_2_P1"              
[37] "Immune_2_P4"               "LymphaticEndothelial_E15"  "LymphaticEndothelial_E16"  "LymphaticEndothelial_P1"  
[41] "LymphaticEndothelial_P4"   "MesenchymalProgenitor_E15" "MesenchymalProgenitor_E16" "MesenchymalProgenitor_P1" 
[45] "MesenchymalProgenitor_P4"  "Muscle_E15"                "Muscle_E16"                "Muscle_P1"                
[49] "Muscle_P4"                 "Neuron/NEC_E15"            "Neuron/NEC_E16"            "Neuron/NEC_P4"            
[53] "RBC_E16"                   "RBC_P1"                    "RBC_P4"                    "SchwannCell_E15"          
[57] "SchwannCell_E16"           "SchwannCell_P1"            "Secretory_E16"             "Secretory_P1"             
[61] "Secretory_P4"              "Thyroid_E15"               "Thyroid_E16"               "Thyroid_P1"               
[65] "Thyroid_P4"                "Transitional_E15"          "VascularEndothelial_E15"   "VascularEndothelial_E16"  
[69] "VascularEndothelial_P1"    "VascularEndothelial_P4"    "VSMC/pericyte_E15"         "VSMC/pericyte_E16"        
[73] "VSMC/pericyte_P1"          "VSMC/pericyte_P4"         
DotPlot(object = seurat_E15E16P1P4_wt, cols.use = c("gray","forestgreen"),genes.plot = rev(c("Ccl20","Ptgds","Ptges","Ptgs2","Cxcl15","Cxcl17","Ccl28","Retnla","Nfkbia","Nfkbiz","F2rl1","Areg","Defb1","Sftpd","Sftpb","Sftpa1","Muc1","Muc4","Muc16","Muc20","Muc5b","Muc5ac","Muc2","Lyz2","Ltf","Slpi","Lcn2","Pigr","Chil4","Itln1","Lbp","Lgals3","Reg3g")),group.by = "ident", x.lab.rot = T,plot.legend = T,do.return = T)+rotate()+ theme(axis.text.x = element_text(angle = 45, vjust = 1,hjust=1)) #this scales both genotypes together
Factor `id` contains implicit NA, consider using `forcats::fct_explicit_na`

seurat_E15E16P1P4_wt<-SetAllIdent(object = seurat_E15E16P1P4_wt, id = "specificType_age")
seurat_E15E16P1P4_wt@ident=factor(seurat_E15E16P1P4_wt@ident,levels(seurat_E15E16P1P4_wt@ident)[c(16:19,1:4,66,59:61,12:15,9:11,30:37)])
DotPlot(object = seurat_E15E16P1P4_wt, cols.use = c("forestgreen","magenta3"),genes.plot = rev(c("Ccl20","Ptgds","Ptges","Ptgs2","Cxcl15","Cxcl17","Ccl28","Retnla","Nfkbia","Nfkbiz","F2rl1","Areg","Defb1","Sftpd","Sftpb","Sftpa1","Muc1","Muc4","Muc16","Muc20","Muc5b","Muc5ac","Muc2","Lyz2","Ltf","Slpi","Lcn2","Pigr","Chil4","Itln1","Lbp","Lgals3","Reg3g")),group.by = "ident", x.lab.rot = T,plot.legend = T,do.return = T,col.min = -2,col.max = 2)+rotate()+ theme(axis.text.x = element_text(angle = 45, vjust = 1,hjust=1)) #this scales both genotypes together
Factor `id` contains implicit NA, consider using `forcats::fct_explicit_na`

Mucosal chemokines (ccl25, ccl28, cxcl14, and cxcl17):

To look into genes correlated with scGPS scores:
seurat_E15E16P1P4_wt <- RunTSNE(object = seurat_E15E16P1P4_wt, dims.use = 1:n.pcs, seed.use = 10, perplexity=30, dim.embed = 2,k.param=15)
df_Ciliopathy_cor_test<-as.data.frame(do.call(rbind, Ciliopathy_cor_test))
df_order_Ciliopathy_cor_test<-df_Ciliopathy_cor_test[order(unlist(df_Ciliopathy_cor_test$estimate),decreasing = TRUE),]
tidy_Ciliopathy_cor<-cbind(df_order_Ciliopathy_cor_test$estimate,df_order_Ciliopathy_cor_test$p.value)
colnames(tidy_Ciliopathy_cor)<-c("cor","p.value")
tidy_Ciliopathy_cor
              cor        p.value      
Zmynd10       0.546579   0            
Pifo          0.5425509  0            
Lrrc6         0.5384109  0            
Drc1          0.5367434  0            
Dcdc2a        0.4935992  0            
Ccdc65        0.4863407  0            
Ccdc103       0.4782748  0            
Nek5          0.4693503  0            
Pacrg         0.4567388  0            
Traf3ip1      0.4471433  0            
Poc1a         0.4238989  0            
Fgfr1op       0.4206791  0            
Tmem138       0.4191797  0            
Ccdc114       0.4153728  0            
Tctex1d2      0.4115401  0            
Cenpf         0.407906   0            
Cep83         0.4070513  0            
Lrrc56        0.4045086  0            
Ift74         0.400825   0            
Cspp1         0.3996876  0            
Nphp1         0.395385   0            
Cep55         0.3951101  0            
Ift57         0.391189   0            
B9d1          0.3873108  0            
Ift88         0.3869675  0            
Rpgrip1l      0.3865638  0            
Dync2h1       0.3857778  0            
Ift172        0.381393   0            
Ift80         0.3790754  0            
Cep290        0.370438   0            
Plk4          0.368893   0            
Ift81         0.3683296  0            
Wdr34         0.3670231  0            
Arl6          0.3664624  0            
Cep41         0.3654999  0            
B9d2          0.3607634  0            
Ift43         0.3601675  0            
Tmem216       0.3597497  0            
Wdr60         0.3579426  0            
C2cd3         0.3569508  0            
Dync2li1      0.3564985  0            
Bbs5          0.3533716  0            
Wdr35         0.349725   0            
Tmem67        0.3472159  0            
Spag1         0.3449336  0            
Nek1          0.343219   0            
Tmem107       0.342606   0            
Wdpcp         0.3425418  0            
Sclt1         0.3367607  0            
Ift52         0.3292574  0            
Wdr19         0.3243224  0            
Kif11         0.3242046  0            
Cc2d2a        0.3237188  0            
2700049A03Rik 0.3222697  0            
Tmem231       0.320627   0            
Tmem17        0.3174036  0            
Cep164        0.3159639  0            
D430042O09Rik 0.3156484  0            
Bbip1         0.3148218  0            
2610301B20Rik 0.3137307  0            
Mks1          0.3134762  0            
Ift140        0.3058836  0            
Armc9         0.3034685  0            
Cep104        0.3006778  0            
1810043G02Rik 0.3004568  0            
Cep120        0.2943722  0            
Pibf1         0.2876425  1.388627e-317
Bbs7          0.2867671  1.392889e-315
Sdccag8       0.2848902  2.576083e-311
Ift122        0.2829121  7.454808e-307
Ift27         0.2670399  2.307436e-272
Bbs2          0.263533   4.716935e-265
Lztfl1        0.2576021  6.101379e-253
Ofd1          0.2527573  2.793616e-243
Intu          0.2493308  1.423027e-236
Inpp5e        0.2490544  4.894807e-236
Bbs1          0.2472615  1.424276e-232
Mre11a        0.2471985  1.882916e-232
Tbc1d32       0.2461905  1.618676e-230
Arl3          0.2422522  4.807888e-223
Poc1b         0.2354816  1.634973e-210
Mapkbp1       0.2330952  3.435638e-206
Fuz           0.2324085  5.899545e-205
Tctn3         0.223917   5.0765e-190  
Kif14         0.2098085  1.478587e-166
Pde6d         0.2009281  1.221831e-152
Notch1        0.1970841  8.116042e-147
Tctn1         0.1954091  2.56165e-144 
Mkks          0.1951724  5.752278e-144
Kctd10        0.1907798  1.571154e-137
Nphp3         0.1855321  4.787185e-130
Ccdc28b       0.1776045  3.662696e-119
Nek8          0.1751189  7.45169e-116 
Ttc21b        0.1615266  1.24399e-98  
Pik3r4        0.1607992  9.445133e-98 
Bbs12         0.1567567  6.200812e-93 
Sall1         0.1512815  1.296525e-86 
Gna12         0.1460858  7.835921e-81 
Galnt11       0.1320623  2.849657e-66 
Gli3          0.1303523  1.338961e-64 
Ahi1          0.1281622  1.719821e-62 
Tubgcp6       0.1242371  8.376372e-59 
Bbs10         0.1201034  4.783023e-55 
Sirt2         0.1090072  1.328542e-45 
Qk            0.1084995  3.413186e-45 
Wwtr1         0.1078645  1.104313e-44 
Fan1          0.09629114 6.398198e-36 
Sufu          0.08002379 2.726486e-25 
Kif7          0.07953328 5.317248e-25 
Glis2         0.0764992  3.024284e-23 
Zfp423        0.03725636 1.354483e-06 
Gucy2e        0.03294734 1.933375e-05 
unlist(tidy_Ciliopathy_cor[,1])
      Zmynd10.cor          Pifo.cor         Lrrc6.cor          Drc1.cor        Dcdc2a.cor        Ccdc65.cor 
       0.54657904        0.54255092        0.53841095        0.53674336        0.49359917        0.48634066 
      Ccdc103.cor          Nek5.cor         Pacrg.cor      Traf3ip1.cor         Poc1a.cor       Fgfr1op.cor 
       0.47827477        0.46935028        0.45673881        0.44714331        0.42389891        0.42067915 
      Tmem138.cor       Ccdc114.cor      Tctex1d2.cor         Cenpf.cor         Cep83.cor        Lrrc56.cor 
       0.41917967        0.41537280        0.41154005        0.40790602        0.40705129        0.40450856 
        Ift74.cor         Cspp1.cor         Nphp1.cor         Cep55.cor         Ift57.cor          B9d1.cor 
       0.40082497        0.39968759        0.39538503        0.39511007        0.39118900        0.38731078 
        Ift88.cor      Rpgrip1l.cor       Dync2h1.cor        Ift172.cor         Ift80.cor        Cep290.cor 
       0.38696745        0.38656376        0.38577781        0.38139299        0.37907543        0.37043802 
         Plk4.cor         Ift81.cor         Wdr34.cor          Arl6.cor         Cep41.cor          B9d2.cor 
       0.36889297        0.36832959        0.36702306        0.36646235        0.36549993        0.36076339 
        Ift43.cor       Tmem216.cor         Wdr60.cor         C2cd3.cor      Dync2li1.cor          Bbs5.cor 
       0.36016751        0.35974972        0.35794263        0.35695076        0.35649847        0.35337160 
        Wdr35.cor        Tmem67.cor         Spag1.cor          Nek1.cor       Tmem107.cor         Wdpcp.cor 
       0.34972497        0.34721589        0.34493360        0.34321905        0.34260603        0.34254181 
        Sclt1.cor         Ift52.cor         Wdr19.cor         Kif11.cor        Cc2d2a.cor 2700049A03Rik.cor 
       0.33676072        0.32925738        0.32432245        0.32420459        0.32371885        0.32226969 
      Tmem231.cor        Tmem17.cor        Cep164.cor D430042O09Rik.cor         Bbip1.cor 2610301B20Rik.cor 
       0.32062701        0.31740361        0.31596392        0.31564838        0.31482181        0.31373074 
         Mks1.cor        Ift140.cor         Armc9.cor        Cep104.cor 1810043G02Rik.cor        Cep120.cor 
       0.31347622        0.30588356        0.30346851        0.30067775        0.30045684        0.29437219 
        Pibf1.cor          Bbs7.cor       Sdccag8.cor        Ift122.cor         Ift27.cor          Bbs2.cor 
       0.28764247        0.28676713        0.28489023        0.28291214        0.26703987        0.26353297 
       Lztfl1.cor          Ofd1.cor          Intu.cor        Inpp5e.cor          Bbs1.cor        Mre11a.cor 
       0.25760209        0.25275731        0.24933081        0.24905441        0.24726149        0.24719847 
      Tbc1d32.cor          Arl3.cor         Poc1b.cor       Mapkbp1.cor           Fuz.cor         Tctn3.cor 
       0.24619054        0.24225224        0.23548163        0.23309521        0.23240846        0.22391701 
        Kif14.cor         Pde6d.cor        Notch1.cor         Tctn1.cor          Mkks.cor        Kctd10.cor 
       0.20980850        0.20092807        0.19708409        0.19540907        0.19517236        0.19077984 
        Nphp3.cor       Ccdc28b.cor          Nek8.cor        Ttc21b.cor        Pik3r4.cor         Bbs12.cor 
       0.18553207        0.17760446        0.17511892        0.16152657        0.16079922        0.15675672 
        Sall1.cor         Gna12.cor       Galnt11.cor          Gli3.cor          Ahi1.cor       Tubgcp6.cor 
       0.15128147        0.14608581        0.13206233        0.13035234        0.12816225        0.12423714 
        Bbs10.cor         Sirt2.cor            Qk.cor         Wwtr1.cor          Fan1.cor          Sufu.cor 
       0.12010344        0.10900717        0.10849955        0.10786448        0.09629114        0.08002379 
         Kif7.cor         Glis2.cor        Zfp423.cor        Gucy2e.cor 
       0.07953328        0.07649920        0.03725636        0.03294734 

#volc_Ciliopathy_cor<-mutate(tidy_Ciliopathy_cor,sig=ifelse(tidy_Ciliopathy_cor$p.value<0.01,"P_adj<0.01","Not Sig"))
df_tidy_ciliopathy_cor<-data.frame(matrix(unlist(tidy_Ciliopathy_cor), nrow=112, byrow=F),stringsAsFactors=FALSE)
colnames(df_tidy_ciliopathy_cor)<-c("cor","p.value")
df_tidy_ciliopathy_cor$gene<-rownames(tidy_Ciliopathy_cor)

unlist(x)[2:30]
    Cenpf     Cep55     Kif11   Tmem138      Plk4   Fgfr1op  Dync2li1     Ift57     Ift52     Nphp1     Ift74      Arl6  Tctex1d2 
0.9290814 0.9066218 0.8907960 0.8105366 0.8061935 0.8028617 0.7735900 0.7513981 0.7497918 0.7491373 0.7369705 0.7260828 0.7077285 
    Cspp1      Mkks    Cep164     Bbip1      B9d1     Pde6d     Ift43      Arl3    Kctd10   Tmem107     Sirt2        Qk    Lztfl1 
0.6831866 0.6693836 0.6540933 0.6537958 0.6483817 0.6434139 0.6353225 0.6175333 0.6173846 0.5910281 0.5530700 0.5435209 0.5248394 
    Armc9  Traf3ip1     Kif14 
0.0000000 0.0000000 0.0000000 
wt_mucosa_cluster<-data.frame(percentile_table_E15E16P1P4wt[,colnames(percentile_table_E15E16P1P4wt) %in% geneList$Mucosa.epithelium.goblet],seurat_E15E16P1P4_wt@meta.data$res.1.4)
aggre_wt_mucosa_cluster<-aggregate(wt_mucosa_cluster[, 1:301], list(wt_mucosa_cluster[,302]), median)
unlist(sort(aggre_wt_mucosa_cluster[aggre_wt_mucosa_cluster$Group.1==8,],decreasing = TRUE))[2:51]
    Aurka     Epcam     Bub1b     Ap1m2      Cdh2     Krt17     Lamb3     Erbb2     Fgfr3     Trp53      Dkc1 
0.9465433 0.9464838 0.9262256 0.8715195 0.8370419 0.8083948 0.7931045 0.7698715 0.7693658 0.7673429 0.7644277 
      Dsp    Ctnnb1      Cdh1    Tmem97    Mapk14     Rab25      Sdc1     Fgfr2      Rela  Cdc42ep4      Nras 
0.7623156 0.7584781 0.7551761 0.7547596 0.7376547 0.7327166 0.7238517 0.7090374 0.7087994 0.6999048 0.6965136 
   Pycard      Med1   Zkscan3      Rnf6      Ece1      Yap1      Odc1      Klf6     Mark2     Smad7    Slc6a6 
0.6929438 0.6918729 0.6917539 0.6882437 0.6864291 0.6695621 0.6653974 0.6621549 0.6598644 0.6582580 0.6565326 
      Bax     Smad4     Stk11     Sar1b   Dnajc10      Pdpn    Nfkbiz     Bcl10   Ndufa13      Rps3     Mfge8 
0.6538256 0.6511483 0.6306521 0.6227094 0.5781473 0.5703832 0.5436994 0.5382853 0.5209127 0.5033615 0.5031830 
     Igf2      Akt1      Gnas    Nfkbia   Scgb3a2     Il17a 
0.4425274 0.4134043 0.4093586 0.4013267 0.3237149 0.0000000 
LS0tCnRpdGxlOiAiVHJhY2hlYV9XVF8xMHgiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KIyMgVGhpcyBzY3JpcHQgYW5hbHl6ZSAxMHggc2NSTkEtc2VxIGRhdGEgZnJvbSBFMTUsIEUxNiwgUDEsIGFuZCBQNCB3dCBtaWNlCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KE1hdHJpeCkKcmVxdWlyZShkZXZ0b29scykKaW5zdGFsbF92ZXJzaW9uKCJtdnRub3JtIiwgdmVyc2lvbiA9ICIxLjAtOCIsIHJlcG9zID0gImh0dHA6Ly9jcmFuLnVzLnItcHJvamVjdC5vcmciKSAjI05vdGUgdGhhdCBJIG5lZWQgdmVyc2lvbiAxLjAtOCBiZWNhdXNlIHRoZSBuZXdlc3QgdmVyc2lvbiByZXF1aXJlcyBSPjMuNSAobXkgciB2ZXJzaW9uIGlzIDMuNCkuIG12dG5vcm0gaXMgYSBkZXBlbmRlbmN5IGZvciBmcGMgd2hpY2ggaXMgYSBkZXBlbmRlbmN5IGZvciBTZXVyYXQuCmxpYnJhcnkoU2V1cmF0KQpgYGAKCiMjIyMjIEZpcnN0IGxvYWQgRTE1IGRhdGEgKG5HZW5lIDFrLCBuVU1JIDVrIGFscmVhZHkgYXBwbGllZCkKYGBge3J9CmxvYWQoIkUxNV9PY3QxMF8xMFhfVHJhY2hlYS5SRGF0YSIpCkUxNV9PY3QxMF9tbTEwLjEuMi4wX1RyYWNoZWEgPC0gU2V0QWxsSWRlbnQob2JqZWN0ID0gRTE1X09jdDEwX21tMTAuMS4yLjBfVHJhY2hlYSwgaWQgPSAiZ2Vub3R5cGUiKQoKYGBgCiMjIyMjIHNlY29uZCBsb2FkIHNldV9FMTZQMVA0X3d0LlJEYXRhCmBgYHtyfQpsb2FkKCJzZXVfRTE2UDFQNF93dC5SRGF0YSIpCmBgYAojIyMjIyBkYXRhIGhhcyBiZWVuIGxvZyBub3JtYWxpemVkLgpgYGB7cn0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LU1lcmdlU2V1cmF0KG9iamVjdDEgPSBzZXVfRTE2UDFQNF93dCxvYmplY3QyID0gU3Vic2V0RGF0YShvYmplY3Q9RTE1X09jdDEwX21tMTAuMS4yLjBfVHJhY2hlYSxpZGVudC51c2U9Yygid3QiKSksbWluLmNlbGxzID0gMSxtaW4uZ2VuZXMgPSAxLHByb2plY3Q9IkUxNU9jdDEwX0UxNkRlYzdfUDFEZWMxMV9QNE9jdDE4IikKYGBgCgojIyMjIyBBbHRlcm5hdGl2ZWx5LCBzZXVyYXRfRTE1RTE2UDFQNF93dCBvYmplY3QgY2FuIGJlIGNyZWF0ZWQgYnkgbWVyZ2luZyA0IHNldXJhdCBvYmplY3RzIGluIEUxNV9PY3QxMF8xMFhfVHJhY2hlYS5SRGF0YSwgRTE2X0RlYzd2M19UcmFjaGVhLlJEYXRhLCBzZXVfUDFfRGVjMTFfbW0xMC4xLjIuMC5SRGF0YSwgYW5kIFA0XzEwWF9tbTEwXzEuMi4wLlJEYXRhIAoKIyMjIyMgcmVtb3ZlIG9sZCBhbmFseXNpcyBkb25lIG9uIHRoZSBFMTZQMVA0IGRhdGFzZXQ6CmBgYHtyfQpzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGE8LXNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YVssLXdoaWNoKG5hbWVzKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSkgJWluJSBjKCJyZXMuMC44IiwgInJlcy4xLjIiLCJyZXMuMS40IiwiY2VsbF90eXBlIiwiUy5TY29yZSIsIkcyTS5TY29yZSIsIlBoYXNlIiwib2xkLmlkZW50IiwiQ2VsbEN5Y2xlX3Njb3JlIiwibW9jb3NhR29ibGV0X3Njb3JlIiwiY2lsaW9wYXRoeV9zY29yZSIsIlBDRF9zY29yZSIpKV0KYGBgCiMjIyMjIEJhc2ljIHN0YXRzIGFib3V0IHRoZSBkYXRhOgpgYGB7cn0KYWdncmVnYXRlKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YVssIGMoMToyLDg6OSldLCBsaXN0KHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRzZXFfZ3JvdXApLCBtZWRpYW4pCgpgYGAKYGBge3J9Cm1lZGlhbihzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkbkdlbmUpIApgYGAKYGBge3J9Cm1lYW4oc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJG5HZW5lKSAKYGBgCmBgYHtyfQptZWRpYW4oc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJG5VTUkpIApgYGAKYGBge3J9Cm1lYW4oc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJG5VTUkpIApgYGAKYGBge3J9CnRhYmxlKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRhZ2UpIApgYGAKYGBge3J9CnRhYmxlKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRzZXFfZ3JvdXApIApgYGAKCiMjIyMjIHNjYWxlIHRoZSBkYXRhOgpgYGB7cn0Kc2V1cmF0X0UxNUUxNlAxUDRfd3QgPC0gU2NhbGVEYXRhKG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0KQpgYGAKCiMjIyMjIGZpbmQgdmFyaWFibGUgZ2VuZXMgYW5kIHJ1biBQQ0E6CmBgYHtyfQpzZXVyYXRfRTE1RTE2UDFQNF93dCA8LSBGaW5kVmFyaWFibGVHZW5lcyhvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZG8ucGxvdCA9IFRSVUUsIHgubG93LmN1dG9mZj0wLjEseC5oaWdoLmN1dG9mZiA9IEluZiwgeS5jdXRvZmYgPSAwLjUpCmBgYApgYGB7cn0Kc2V1cmF0X0UxNUUxNlAxUDRfd3QgPC0gUnVuUENBKG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LHBjcy5jb21wdXRlID0gMjUsIGRvLnByaW50ID0gRkFMU0UpCnNldXJhdF9FMTVFMTZQMVA0X3d0IDwtIFByb2plY3RQQ0Eob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGRvLnByaW50ID0gRkFMU0UpCmBgYApgYGB7cixmaWcuaGVpZ2h0PTIwLGZpZy53aWR0aD04fQpQQ0hlYXRtYXAob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIHBjLnVzZSA9IGMoMToxMiksIGNlbGxzLnVzZSA9IDUwMCwgZG8uYmFsYW5jZWQgPSBUUlVFLCBsYWJlbC5jb2x1bW5zID0gRkFMU0UsIG51bS5nZW5lcyA9IDMwKQoKYGBgCgpgYGB7cn0KUENFbGJvd1Bsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsbnVtLnBjID0gMjUpCmBgYAojIyMjIyBjbHVzdGVyaW5nOgojIyMjIyB0cnkgcmVzb2x1dGlvbj0wLjg6CmBgYHtyfQpuLnBjcyA9IDI0CnJlcy51c2VkIDwtIDAuOAoKc2V1cmF0X0UxNUUxNlAxUDRfd3QgPC0gRmluZENsdXN0ZXJzKG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCByZWR1Y3Rpb24udHlwZSA9ICJwY2EiLCBkaW1zLnVzZSA9IDE6bi5wY3MsIAogICAgcmVzb2x1dGlvbiA9IHJlcy51c2VkLCBwcmludC5vdXRwdXQgPSAwLCBzYXZlLlNOTiA9IFRSVUUpCmBgYApgYGB7cn0Kc2V1cmF0X0UxNUUxNlAxUDRfd3QgPC0gUnVuVFNORShvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZGltcy51c2UgPSAxOm4ucGNzLCBzZWVkLnVzZSA9IDEwLCBwZXJwbGV4aXR5PTMwLCBkaW0uZW1iZWQgPSAyKQoKYGBgCgpgYGB7cn0KVFNORVBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGRvLmxhYmVsID0gVCxwdC5zaXplID0gMC4yLGdyb3VwLmJ5PSJyZXMuMC44IikKCmBgYAoKIyMjIyMgcmVzb2x1dGlvbj0xLjQ6CmBgYHtyfQpuLnBjcyA9IDI0CnJlcy51c2VkIDwtIDEuNAoKc2V1cmF0X0UxNUUxNlAxUDRfd3QgPC0gRmluZENsdXN0ZXJzKG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCByZWR1Y3Rpb24udHlwZSA9ICJwY2EiLCBkaW1zLnVzZSA9IDE6bi5wY3MsIAogICAgcmVzb2x1dGlvbiA9IHJlcy51c2VkLCBwcmludC5vdXRwdXQgPSAwLCBzYXZlLlNOTiA9IFRSVUUpCmBgYAoKIyMjIyMgay5wYXJhbT0xNSB0byBoYXZlIGJldHRlciBkaXN0aW5jdGlvbiBmb3IgcmFyZSBjZWxsczoKYGBge3J9CnNldXJhdF9FMTVFMTZQMVA0X3d0IDwtIFJ1blRTTkUob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGRpbXMudXNlID0gMTpuLnBjcywgc2VlZC51c2UgPSAxMCwgcGVycGxleGl0eT0zMCwgZGltLmVtYmVkID0gMixrLnBhcmFtPTE1KQoKYGBgCgpgYGB7cn0KVFNORVBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGRvLmxhYmVsID0gVCxwdC5zaXplID0gMC4yLGdyb3VwLmJ5PSJyZXMuMS40IikKCmBgYAoKCiMjIyMjIyByZXMxLjYgbGVhZHMgdG8gZnVydGhlciBzcGVjaWZpY2F0aW9uIG9mIGltbXVuZSBjZWxscywgUDEgYW5kIFA0IG1lc2VuY2h5bWFsIHByb2dlbml0b3Igc2VwYXJhdGlvbiwgYW5kIHNlcGFyYXRpb24gb2YgRTE2IGJhc2FsOgpgYGB7cn0Kbi5wY3MgPSAyNApyZXMudXNlZCA8LSAxLjYKCnNldXJhdF9FMTVFMTZQMVA0X3d0IDwtIEZpbmRDbHVzdGVycyhvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgcmVkdWN0aW9uLnR5cGUgPSAicGNhIiwgZGltcy51c2UgPSAxOm4ucGNzLCAKICAgIHJlc29sdXRpb24gPSByZXMudXNlZCwgcHJpbnQub3V0cHV0ID0gMCwgc2F2ZS5TTk4gPSBUUlVFKQpgYGAKYGBge3J9CnNldXJhdF9FMTVFMTZQMVA0X3d0IDwtIFJ1blRTTkUob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGRpbXMudXNlID0gMTpuLnBjcywgc2VlZC51c2UgPSAxMCwgcGVycGxleGl0eT0zMCwgZGltLmVtYmVkID0gMixrLnBhcmFtPTE1KQoKYGBgCgpgYGB7cn0KVFNORVBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGRvLmxhYmVsID0gVCxwdC5zaXplID0gMC4yLGdyb3VwLmJ5PSJyZXMuMS42IikKYGBgCgojIyMjIyBXZSB3aWxsIHVzZSByZXNvbHV0aW9uIG9mIDEuNCBmb3IgZnVydGhlciBhbmFseXNpcy4KCiMjIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjIyMjIyMjIyMjIyMjIyMjCgpgYGB7cn0KI3NhdmUoc2V1cmF0X0UxNUUxNlAxUDRfd3QsZmlsZT0ic2V1cmF0RTE1RTE2UDFQNF93dC5SRGF0YSIpICAjIHRoaXMgc2V1cmF0IG9iamVjdCB3aWxsIGJlIHVwZGF0ZWQgYW5kIHNhdmVkIGFzIGFuYWx5c2lzIGdvZXMKYGBgCgpgYGB7cn0KI2xvYWQoInNldXJhdEUxNUUxNlAxUDRfd3QuUkRhdGEiKQpgYGAKCgpgYGB7cixmaWcud2lkdGg9MTAsZmlnLmhlaWdodD01fQoKVFNORVBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGRvLmxhYmVsID0gRixwdC5zaXplID0gMC4yLGdyb3VwLmJ5PSJhZ2UiKQoKYGBgCiMjIyMjIDIgRTE2IHd0IG1pY2U6CmBgYHtyLGZpZy53aWR0aD0xMCxmaWcuaGVpZ2h0PTV9ClRTTkVQbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBkby5sYWJlbCA9IEYsZ3JvdXAuYnk9InNlcV9ncm91cCIscHQuc2l6ZSA9IDAuMixjZWxscy51c2UgPSBzZXVyYXRfRTE1RTE2UDFQNF93dEBjZWxsLm5hbWVzW3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRhZ2U9PSJFMTYiXSkKCmBgYAoKIyMjIyMgMiBQMSB3dCBtaWNlOgpgYGB7cixmaWcud2lkdGg9MTAsZmlnLmhlaWdodD01fQpUU05FUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZG8ubGFiZWwgPSBGLGdyb3VwLmJ5PSJzZXFfZ3JvdXAiLHB0LnNpemUgPSAwLjIsY2VsbHMudXNlID0gc2V1cmF0X0UxNUUxNlAxUDRfd3RAY2VsbC5uYW1lc1tzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkYWdlPT0iUDEiXSkKCmBgYAoKCiMjIyMjIEFubm90YXRlIGNsdXN0ZXJzIGJ5IGtub3duIG1hcmtlcnM6CgpgYGB7cixmaWcuaGVpZ2h0PTE3LGZpZy53aWR0aD01MH0Kc2V1cmF0X0UxNUUxNlAxUDRfd3QgPC0gU2V0QWxsSWRlbnQob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGlkID0gInJlcy4xLjQiKQoKRG9IZWF0bWFwKG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBnZW5lcy51c2UgPSBjKCJFcGNhbSIsIlRycDYzIiwiS3J0NCIsIlNjZ2IzYTIiLCJTcGRlZiIsIkNyZWIzbDEiLCJNdWM1YiIsIkdwMiIsIkZveGoxIiwiU25hcDI1IiwiQ2hnYSIsIlBscDEiLCJNcHoiLCJGY2VyMWciLCJQZWNhbTEiLCJBY3RhMiIsIk15aDExIiwiQ29sMTFhMSIsIkFjYW4iLCJXbnQyIiwiUGkxNiIsIkx5NmEiLCJUd2lzdDIiLCJNa2k2NyIsIlRvcDJhIiwiVGciLCJQYXg4IiksIAogICAgc2xpbS5jb2wubGFiZWwgPSBUUlVFLCBncm91cC5sYWJlbC5yb3QgPSBUUlVFLHVzZS5zY2FsZWQgPSBULGdyb3VwLmJ5PSJyZXMuMS40Iixncm91cC5jZXggPSAyNSxjZXgucm93PTMwLGdyb3VwLm9yZGVyID0gYygzLDgsMTEsOSwxLDMwLDIsMjAsMjksNywyNiwyNywyOCwxNCwzMSwyMywxOCwyMSwxMywxNSwxOSwxNiwxMCwxMiw2LDQsMTcsMCw1LDMzLDIyLDI1LDI0LDMyKQogICkKYGBgCgpgYGB7cixmaWcuaGVpZ2h0PTE3LGZpZy53aWR0aD01MH0Kc2V1cmF0X0UxNUUxNlAxUDRfd3QgPC0gU2V0QWxsSWRlbnQob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGlkID0gInJlcy4xLjQiKQoKRG9IZWF0bWFwKG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBjZWxscy51c2UgPSBzZXVyYXRfRTE1RTE2UDFQNF93dEBjZWxsLm5hbWVzW3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRyZXMuMS40ICVpbiUgYygzLDgsMTEsOSwxLDMwLDIsMjAsMjksNywyNiwyNywyOCldLGdlbmVzLnVzZSA9IGMoIkVwY2FtIiwiVHJwNjMiLCJLcnQ0IiwiU2NnYjNhMiIsIlNwZGVmIiwiQ3JlYjNsMSIsIk11YzViIiwiR3AyIiwiRm94ajEiLCJTbmFwMjUiLCJDaGdhIiwiUGxwMSIsIk1weiIsIkZjZXIxZyIsIlBlY2FtMSIsIkFjdGEyIiwiTXloMTEiLCJDb2wxMWExIiwiQWNhbiIsIldudDIiLCJQaTE2IiwiTHk2YSIsIlR3aXN0MiIsIk1raTY3IiwiVG9wMmEiLCJUZyIsIlBheDgiKSwgCiAgICBzbGltLmNvbC5sYWJlbCA9IFRSVUUsIGdyb3VwLmxhYmVsLnJvdCA9IFRSVUUsdXNlLnNjYWxlZCA9IFQsZ3JvdXAuYnk9InJlcy4xLjQiLGdyb3VwLmNleCA9IDI1LGNleC5yb3c9MzUsZ3JvdXAub3JkZXIgPSBjKDMsOCwxMSw5LDEsMzAsMiwyMCwyOSw3LDI2LDI3LDI4KQogICkKYGBgCmBgYHtyLGZpZy5oZWlnaHQ9NSxmaWcud2lkdGg9MjV9ClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJkb3VibGV0X3Njb3JlIiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjMsdXNlLnJhdz1GLGdyb3VwLmJ5PSJyZXMuMS40IikKCmBgYAoKYGBge3IsZmlnLmhlaWdodD02LGZpZy53aWR0aD0xNX0KVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoImRvdWJsZXRfc2NvcmUiKSwgbkNvbCA9IDEseC5sYWIucm90ID0gVCxwb2ludC5zaXplLnVzZSA9IDAuMyx1c2UucmF3PUYsZ3JvdXAuYnk9InNwZWNpZmljX3R5cGUiKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygnI2U2MTk0YicsICcjM2NiNDRiJywgJyNmZmUxMTknLCAnIzQzNjNkOCcsICcjZjU4MjMxJywgJyM5MTFlYjQnLCAnIzQ2ZjBmMCcsICcjZjAzMmU2JywgJyNiY2Y2MGMnLCAnI2ZhYmViZScsICcjMDA4MDgwJywgJyNlNmJlZmYnLCAnIzlhNjMyNCcsICcjMDAwMDAwJywgJyNmZmZhYzgnLCAnIzgwMDAwMCcsICcjYWFmZmMzJywgJyM4MDgwMDAnLCAnI2ZmZDhiMScsICcjMDAwMDc1JywgJyM4MDgwODAnCikpCgpgYGAKYGBge3IsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTEwfQpGZWF0dXJlUGxvdChzZXVyYXRfRTE1RTE2UDFQNF93dCwgYygiQWxhczIiLCJIYmEtYTIiKSxwdC5zaXplID0gMC4zLCBvdmVybGF5PVRSVUUsbm8ubGVnZW5kPUZBTFNFLGNvbHMudXNlPWMoImdyZXkiLCJyZWQiLCJibHVlIiwiZ3JlZW4iKSxtYXguY3V0b2ZmID0gYygyLjUsNSkpCmBgYAoKCmBgYHtyLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMn0KRmVhdHVyZVBsb3Qoc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGMoIlRnIiwiUGF4OCIpLHB0LnNpemUgPSAwLjIsbm8ubGVnZW5kPUZBTFNFLG5Db2wgPSAyKQpgYGAKYGBge3IsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTEwfQpGZWF0dXJlUGxvdChzZXVyYXRfRTE1RTE2UDFQNF93dCwgYygiVGciLCJQYXg4IikscHQuc2l6ZSA9IDAuMywgb3ZlcmxheT1UUlVFLG5vLmxlZ2VuZD1GQUxTRSxjb2xzLnVzZT1jKCJncmV5IiwicmVkIiwiYmx1ZSIsImdyZWVuIiksbWF4LmN1dG9mZiA9IGMoMi41LDEpKQpgYGAKCiMjIyMjIGNsdXN0ZXIgYW5ub3RhdGlvbiB2MToKYGBge3J9CmxpYnJhcnkocGx5cikKc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJGNlbGxfdHlwZTwtbWFwdmFsdWVzKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRyZXMuMS40LGZyb209YygiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5IiwiMjAiLCIyMSIsIjIyIiwiMjMiLCIyNCIsIjI1IiwiMjYiLCIyNyIsIjI4IiwiMjkiLCIzMCIsIjMxIiwiMzIiLCIzMyIpLHRvPWMoIkZpYnJvYmxhc3QiLCJCYXNhbCIsIlNlY3JldG9yeSIsIkJhc2FsIiwiRmlicm9ibGFzdCIsIkZpYnJvYmxhc3QiLCJGaWJyb2JsYXN0IiwiU2VjcmV0b3J5IiwiQ3ljbGluZ0VwaXRoZWxpYWwiLCJUcmFuc2l0aW9uYWwiLCJGaWJyb2JsYXN0IiwiQ3ljbGluZ0VwaXRoZWxpYWwiLCJGaWJyb2JsYXN0IiwiRmlicm9ibGFzdCIsIkltbXVuZSIsIkZpYnJvYmxhc3QiLCJGaWJyb2JsYXN0IiwiRmlicm9ibGFzdCIsIk11c2NsZSIsIkZpYnJvYmxhc3QiLCJDaWxpYXRlZCIsIk11c2NsZSIsIk1lc2VuY2h5bWFsUHJvZ2VuaXRvciIsIkVuZG90aGVsaWFsIiwiVGh5cm9pZCIsIk1lc2VuY2h5bWFsUHJvZ2VuaXRvciIsIk5ldXJhbC9TY2h3YW5uIiwiQ2lsaWF0ZWQiLCJDaWxpYVNlY3JldG9yeSIsIkJhc2FsIiwiQ3ljbGluZ0VwaXRoZWxpYWwiLCJFbmRvdGhlbGlhbCIsIkRvdWJsZXQiLCJNZXNlbmNoeW1hbFByb2dlbml0b3IiKSkKYGBgCgojIyMjIyB1c2Ugbm9uU2hoIHN1YnNldCBjbHVzdGVyaW5nIGluZm9ybWF0aW9uIChzZXVyYXQgb2JqZWN0OiBFMTVFMTZQMVA0X3d0X25vblNoaCByZXNvbHV0aW9uPTEuNikgdG8gYW5ub3RhdGUgdGhvc2Ugbm9uLWVwaXRoZWxpYWwgY2VsbHM6CmBgYHtyfQpzZXVyYXRfRTE1RTE2UDFQNF93dDwtQWRkTWV0YURhdGEob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIG1ldGFkYXRhID0gd3Rfbm9uU2hoX2NlbGxUeXBlMS42LCBjb2wubmFtZSA9ICJzcGVjaWZpY190eXBlIikKYGBgCmBgYHtyfQp0YWJsZShzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkc3BlY2lmaWNfdHlwZSkKYGBgCgojIyMjIyBrZWVwIHRoZSBlcGl0aGVsaWFsIGNlbGwgYW5ub3RhdGlvbiBhcyBpbiBzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkY2VsbF90eXBlOgpgYGB7cn0Kc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJHNwZWNpZmljX3R5cGUgPC0gaWZlbHNlKGlzLm5hKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRzcGVjaWZpY190eXBlKSwgYXMuY2hhcmFjdGVyKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRjZWxsX3R5cGUpLCBhcy5jaGFyYWN0ZXIoc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJHNwZWNpZmljX3R5cGUpKQpgYGAKCiMjIyMjIG5vdyB3ZSBoYXZlIG5ldyAobW9yZSBkZXRhaWxlZCkgYW5ub3RhdGlvbiBmb3IgYWxsIGNlbGxzOgpgYGB7cn0KdGFibGUoc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJHNwZWNpZmljX3R5cGUpCmBgYAoKYGBge3J9CnRhYmxlKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRzcGVjaWZpY190eXBlLHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRnYXRlLHVzZU5BID0gImFsd2F5cyIpICAKI2dhdGUgPE5BPiBtZWFucyBjZWxscyBmcm9tIEUxNiBhbmQgUDEgd2hpY2ggZGlkIG5vdCBnbyB0aHJvdWdoIEZBQ1MKYGBgCiMjIyMjIHNwZWNpZmljX3R5cGUgb2YgZWFjaCBjZWxsIGlzIGRlZmluZWQgbGF0ZXIuCmBgYHtyLGZpZy53aWR0aD0xMCxmaWcuaGVpZ2h0PTV9CgpUU05FUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZG8ubGFiZWwgPSBGLHB0LnNpemUgPSAwLjIsZ3JvdXAuYnk9InNwZWNpZmljX3R5cGUiKStzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyNlNjE5NGInLCAnIzNjYjQ0YicsICcjZmZlMTE5JywgJyM0MzYzZDgnLCAnI2Y1ODIzMScsICcjOTExZWI0JywgJyM0NmYwZjAnLCAnI2YwMzJlNicsICcjYmNmNjBjJywgJyNmYWJlYmUnLCAnIzAwODA4MCcsICcjZTZiZWZmJywgJyM5YTYzMjQnLCAnIzAwMDAwMCcsICcjZmZmYWM4JywgJyM4MDAwMDAnLCAnI2FhZmZjMycsICcjODA4MDAwJywgJyNmZmQ4YjEnLCAnIzAwMDA3NScsICcjODA4MDgwJwopKQoKYGBgCmBgYHtyLGZpZy53aWR0aD01LGZpZy5oZWlnaHQ9NX0KZ2dwbG90KGRhdGE9c2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhW3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRhZ2UgJWluJSBjKCJFMTUiKSxdLGFlcyhnYXRlLGZpbGw9c3BlY2lmaWNfdHlwZSkpKyAKICAgIGdlb21fYmFyKHBvc2l0aW9uPSJmaWxsIikrIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpK3NjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCcjZTYxOTRiJywgJyMzY2I0NGInLCAnIzQzNjNkOCcsICcjZjU4MjMxJywgJyM5MTFlYjQnLCAnI2YwMzJlNicsICcjYmNmNjBjJywgJyNmYWJlYmUnLCAnIzAwODA4MCcsICcjZTZiZWZmJywgJyM5YTYzMjQnLCAnIzAwMDAwMCcsICcjODAwMDAwJywgJyM4MDgwMDAnLCAnI2ZmZDhiMScsICcjMDAwMDc1JywgJyM4MDgwODAnLCAnI2ZmZmZmZicKKSkgIApgYGAKCgpgYGB7cixmaWcud2lkdGg9NSxmaWcuaGVpZ2h0PTV9CmdncGxvdChkYXRhPXNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YVtzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkYWdlICVpbiUgYygiUDQiKSxdLGFlcyhnYXRlLGZpbGw9c3BlY2lmaWNfdHlwZSkpKyAKICAgIGdlb21fYmFyKHBvc2l0aW9uPSJmaWxsIikrIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpK3NjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCcjZTYxOTRiJywgJyMzY2I0NGInLCAnI2ZmZTExOScsICcjNDM2M2Q4JywgJyNmNTgyMzEnLCAnIzkxMWViNCcsICcjZjAzMmU2JywgJyNiY2Y2MGMnLCAnI2ZhYmViZScsICcjMDA4MDgwJywgJyNlNmJlZmYnLCAnIzlhNjMyNCcsICcjMDAwMDAwJywgJyNmZmZhYzgnLCAnI2FhZmZjMycsICcjODA4MDAwJywgJyMwMDAwNzUnLCAnIzgwODA4MCcsICcjZmZmZmZmJwopKQpgYGAKYGBge3IsZmlnLndpZHRoPTEwLGZpZy5oZWlnaHQ9NX0KZ2dwbG90KGRhdGE9c2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhLGFlcyhzcGVjaWZpY190eXBlLGZpbGw9YWdlKSkrIAogICAgZ2VvbV9iYXIocG9zaXRpb249ImZpbGwiKSsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkKYGBgCgoKCmBgYHtyLGZpZy53aWR0aD01LGZpZy5oZWlnaHQ9OH0KZ2dwbG90KGRhdGE9c2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhW3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRhZ2UgJWluJSBjKCJQMSIpLF0sYWVzKHNlcV9ncm91cCxmaWxsPXNwZWNpZmljX3R5cGUpKSsgCiAgICBnZW9tX2Jhcihwb3NpdGlvbj0iZmlsbCIpKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygnI2U2MTk0YicsICcjM2NiNDRiJywgJyNmZmUxMTknLCAnIzQzNjNkOCcsICcjZjU4MjMxJywgJyM5MTFlYjQnLCAnIzQ2ZjBmMCcsICcjZjAzMmU2JywgJyNiY2Y2MGMnLCAnI2ZhYmViZScsICcjMDA4MDgwJywgJyNlNmJlZmYnLCAnIzlhNjMyNCcsICcjZmZmYWM4JywgJyM4MDAwMDAnLCAnI2FhZmZjMycsICcjODA4MDAwJywgJyMwMDAwNzUnLCAnIzgwODA4MCcsICcjZmZmZmZmJwopKQpgYGAKYGBge3IsZmlnLndpZHRoPTUsZmlnLmhlaWdodD04fQpnZ3Bsb3QoZGF0YT1zZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGFbc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJGFnZSAlaW4lIGMoIkUxNiIpLF0sYWVzKHNlcV9ncm91cCxmaWxsPXNwZWNpZmljX3R5cGUpKSsgCiAgICBnZW9tX2Jhcihwb3NpdGlvbj0iZmlsbCIpKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygnI2U2MTk0YicsICcjM2NiNDRiJywgJyNmZmUxMTknLCAnIzQzNjNkOCcsICcjZjU4MjMxJywgJyM5MTFlYjQnLCAnIzQ2ZjBmMCcsICcjZjAzMmU2JywgJyNiY2Y2MGMnLCAnI2ZhYmViZScsICcjMDA4MDgwJywgJyNlNmJlZmYnLCAnIzlhNjMyNCcsJyMwMDAwMDAnLCAnI2ZmZmFjOCcsICcjODAwMDAwJywgJyNhYWZmYzMnLCAnIzgwODAwMCcsICcjMDAwMDc1JywgJyM4MDgwODAnLCAnI2ZmZmZmZicKKSkKYGBgCgoKYGBge3J9CnNhdmUoc2V1cmF0X0UxNUUxNlAxUDRfd3QsZmlsZT0ic2V1cmF0RTE1RTE2UDFQNF93dC5SRGF0YSIpCmBgYAoKYGBge3IsZmlnLmhlaWdodD0xNyxmaWcud2lkdGg9OTB9CkRvSGVhdG1hcChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZ2VuZXMudXNlID0gYygiRXBjYW0iLCJUcnA2MyIsIktydDUiLCJLcnQ4IiwiU2NnYjNhMiIsIlNwZGVmIiwiQ3JlYjNsMSIsIkdwMiIsIkZveGoxIiwiVHdpc3QyIiwiV250MiIsIkx5NmEiLCJUaHkxIiwiU294OSIsIkFjYW4iLCJBY3RhMiIsIk15aDExIiwiUmdzNSIsIk5vdGNoMyIsIlBlY2FtMSIsIkx5dmUxIiwiRmNlcjFnIiwiQzFxYSIsIkNkM2ciLCJQbHAxIiwiTXB6IiwiQXNjbDEiLCJDaGdhIiwiU25hcDI1IiwiTWtpNjciKSwgCiAgICBzbGltLmNvbC5sYWJlbCA9IFRSVUUsIGdyb3VwLmxhYmVsLnJvdCA9IFRSVUUsdXNlLnNjYWxlZCA9IFQsZ3JvdXAuYnk9InNwZWNpZmljX3R5cGUiLGdyb3VwLmNleCA9IDMwLGNleC5yb3c9MzAsY2VsbHMudXNlID0gc2V1cmF0X0UxNUUxNlAxUDRfd3RAY2VsbC5uYW1lc1shKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRzcGVjaWZpY190eXBlICVpbiUgYygiVGh5cm9pZCIsIkRvdWJsZXQiLCJSQkMiKSldLGdyb3VwLm9yZGVyID0gYygiQ3ljbGluZ0VwaXRoZWxpYWwiLCJCYXNhbCIsIlRyYW5zaXRpb25hbCIsIlNlY3JldG9yeSIsIkNpbGlhdGVkIiwiQ2lsaWFTZWNyZXRvcnkiLCJGaWJyb2JsYXN0IiwiQ3ljbGluZ0ZpYnJvYmxhc3QiLCJNZXNlbmNoeW1hbFByb2dlbml0b3IiLCJDaG9uZHJvY3l0ZSIsIk11c2NsZSIsIlZTTUMvcGVyaWN5dGUiLCJMeW1waGF0aWNFbmRvdGhlbGlhbCIsIlZhc2N1bGFyRW5kb3RoZWxpYWwiLCJJbW11bmVfMSIsIkltbXVuZV8yIiwiU2Nod2FubkNlbGwiLCJOZXVyb24vTkVDIikKICApCmBgYAoKCiMjIyMjIGZpbmQgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIGJldHdlZW4gY2x1c3RlcnMgb2YgaW50ZXJlc3Q6CmBgYHtyfQpzZXVyYXRfRTE1RTE2UDFQNF93dCA8LSBTZXRBbGxJZGVudChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgaWQgPSAicmVzLjEuNCIpCgpFMTVFMTZQMVA0X3d0X3JlczE0X0Jhc2FsU2VjcmV0b3J5PC1GaW5kTWFya2VycyhzZXVyYXRfRTE1RTE2UDFQNF93dCxpZGVudC4xPWMoOSwzMCksb25seS5wb3MgPSBUUlVFKQpFMTVFMTZQMVA0X3d0X3JlczE0X0Jhc2FsU2VjcmV0b3J5CmBgYAoKIyMjIyMgRm9yIHRoZSBwdXJwb3NlIG9mIHZpc3VhbGl6YXRpb24sIHdlIGF2ZXJhZ2Ugd2l0aGluIGVhY2ggc3BlY2lmaWMgY2VsbCB0eXBlOgpgYGB7cn0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJzcGVjaWZpY190eXBlIikKYXZlcmFnZV93dF9zcGVjaWZpY19Bbm5vdGF0aW9uPC1BdmVyYWdlRXhwcmVzc2lvbihvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCxyZXR1cm4uc2V1cmF0ID0gVCkKYGBgCmBgYHtyLGZpZy5oZWlnaHQ9MTIsZmlnLndpZHRoPTE1fQoKRG9IZWF0bWFwKG9iamVjdCA9IGF2ZXJhZ2Vfd3Rfc3BlY2lmaWNfQW5ub3RhdGlvbiwgZ2VuZXMudXNlID0gYygiRXBjYW0iLCJUcnA2MyIsIktydDUiLCJLcnQ4IiwiU2NnYjNhMiIsIlNwZGVmIiwiQ3JlYjNsMSIsIkdwMiIsIkZveGoxIiwiVHdpc3QyIiwiV250MiIsIkx5NmEiLCJUaHkxIiwiU294OSIsIkFjYW4iLCJBY3RhMiIsIk15aDExIiwiUmdzNSIsIk5vdGNoMyIsIlBlY2FtMSIsIkx5dmUxIiwiRmNlcjFnIiwiQzFxYSIsIkNkM2ciLCJQbHAxIiwiTXB6IiwiQXNjbDEiLCJDaGdhIiwiU25hcDI1IiwiTWtpNjciKSwgCiAgICBzbGltLmNvbC5sYWJlbCA9IFRSVUUsIGdyb3VwLmxhYmVsLnJvdCA9IFRSVUUsdXNlLnNjYWxlZCA9IFQsZ3JvdXAuY2V4ID0gMzAsY2V4LnJvdz0yMCxjZWxscy51c2UgPSBhdmVyYWdlX3d0X3NwZWNpZmljX0Fubm90YXRpb25AY2VsbC5uYW1lc1shKGF2ZXJhZ2Vfd3Rfc3BlY2lmaWNfQW5ub3RhdGlvbkBjZWxsLm5hbWVzICVpbiUgYygiVGh5cm9pZCIsIkRvdWJsZXQiLCJSQkMiKSldLGdyb3VwLm9yZGVyID0gYygiQ3ljbGluZ0VwaXRoZWxpYWwiLCJCYXNhbCIsIlRyYW5zaXRpb25hbCIsIlNlY3JldG9yeSIsIkNpbGlhdGVkIiwiQ2lsaWFTZWNyZXRvcnkiLCJGaWJyb2JsYXN0IiwiQ3ljbGluZ0ZpYnJvYmxhc3QiLCJNZXNlbmNoeW1hbFByb2dlbml0b3IiLCJDaG9uZHJvY3l0ZSIsIk11c2NsZSIsIlZTTUMvcGVyaWN5dGUiLCJMeW1waGF0aWNFbmRvdGhlbGlhbCIsIlZhc2N1bGFyRW5kb3RoZWxpYWwiLCJJbW11bmVfMSIsIkltbXVuZV8yIiwiU2Nod2FubkNlbGwiLCJOZXVyb24vTkVDIikpCmBgYAoKYGBge3IsZmlnLmhlaWdodD0xNSxmaWcud2lkdGg9MTV9CgpEb0hlYXRtYXAob2JqZWN0ID0gYXZlcmFnZV93dF9zcGVjaWZpY19Bbm5vdGF0aW9uLCBnZW5lcy51c2UgPSBjKCJFcGNhbSIsIlRycDYzIiwiS3J0NSIsIktydDgiLCJTY2diM2EyIiwiTXVjNWFjIiwiU3BkZWYiLCJDcmViM2wxIiwiR3AyIiwiRm94ajEiLCJDZGhyMyIsIlR3aXN0MiIsIldudDIiLCJMeTZhIiwiUGkxNiIsIkNkMzQiLCJUaHkxIiwiU294OSIsIkFjYW4iLCJBY3RhMiIsIk15aDExIiwiUmdzNSIsIk5vdGNoMyIsIlBlY2FtMSIsIkx5dmUxIiwiRmNlcjFnIiwiQ2QzZyIsIkMxcWEiLCJDeDNjcjEiLCJQbHAxIiwiTXB6IiwiQXNjbDEiLCJDaGdhIiwiU25hcDI1IiwiTWtpNjciKSwgCiAgICBzbGltLmNvbC5sYWJlbCA9IFRSVUUsIGdyb3VwLmxhYmVsLnJvdCA9IFRSVUUsdXNlLnNjYWxlZCA9IFQsZ3JvdXAuY2V4ID0gMzAsY2V4LnJvdz0yMCxjZWxscy51c2UgPSBhdmVyYWdlX3d0X3NwZWNpZmljX0Fubm90YXRpb25AY2VsbC5uYW1lc1shKGF2ZXJhZ2Vfd3Rfc3BlY2lmaWNfQW5ub3RhdGlvbkBjZWxsLm5hbWVzICVpbiUgYygiVGh5cm9pZCIsIkRvdWJsZXQiLCJSQkMiKSldLGdyb3VwLm9yZGVyID0gYygiQ3ljbGluZ0VwaXRoZWxpYWwiLCJCYXNhbCIsIlRyYW5zaXRpb25hbCIsIlNlY3JldG9yeSIsIkNpbGlhdGVkIiwiQ2lsaWFTZWNyZXRvcnkiLCJGaWJyb2JsYXN0IiwiQ3ljbGluZ0ZpYnJvYmxhc3QiLCJNZXNlbmNoeW1hbFByb2dlbml0b3IiLCJDaG9uZHJvY3l0ZSIsIk11c2NsZSIsIlZTTUMvcGVyaWN5dGUiLCJMeW1waGF0aWNFbmRvdGhlbGlhbCIsIlZhc2N1bGFyRW5kb3RoZWxpYWwiLCJJbW11bmVfMSIsIkltbXVuZV8yIiwiU2Nod2FubkNlbGwiLCJOZXVyb24vTkVDIikpCmBgYAoKCmBgYHtyLGZpZy5oZWlnaHQ9NixmaWcud2lkdGg9MTJ9CnNldXJhdF9FMTVFMTZQMVA0X3d0PC1TZXRBbGxJZGVudChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgaWQgPSAic3BlY2lmaWNfdHlwZSIpCiMganVzdCB0byBwbG90IGRpZmZlcmVudCBjZWxsIHR5cGVzIGJ5IGEgY3VzdG9tIG9yZGVyOgpzZXVyYXRfRTE1RTE2UDFQNF93dEBpZGVudCA9IGZhY3RvcihzZXVyYXRfRTE1RTE2UDFQNF93dEBpZGVudCxsZXZlbHMoc2V1cmF0X0UxNUUxNlAxUDRfd3RAaWRlbnQpW2MoNSwxLDE5LDE3LDQsMywxNCwxNiwyMCwxMSw5LDEwLDEzLDIxLDEyLDIsOCw2LDE4LDE1LDcpXSkKRG90UGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgY29scy51c2UgPSBjKCJsaWdodGdyZXkiLCJyZWQiKSxnZW5lcy5wbG90ID0gYygiQW5vMSIsIkNmdHIiLCJMcnJjOGEiLCJDbGNhM2ExIiwiQ2xjYTNhMiIsIkNsY2EzYiIsIkNsY2E0YSIsIkNsY2E0YiIsIkNsY2MxIiwiQ2xjbjIiLCJDbGNuMyIsIkNsY240IiwiQ2xjbjciLCJDbGNua2EiLCJDbGNua2IiLCJDbGNhMSIsIkNsY2EyIiwiR2FicnAiLCJBbm8yIiwiQ2xjbjEiLCJDbGNuNSIsIkNsaWMzIiksZ3JvdXAuYnkgPSAiaWRlbnQiLCB4LmxhYi5yb3QgPSBULHBsb3QubGVnZW5kID0gVCkgIyBvdGhlciBjaGxvcmlkZSBjaGFubmVscwpgYGAKYGBge3J9CnByaW50KGxldmVscyhzZXVyYXRfRTE1RTE2UDFQNF93dEBpZGVudCkpCmBgYAoKYGBge3IsZmlnLmhlaWdodD02LGZpZy53aWR0aD0xMn0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJzcGVjaWZpY190eXBlIikKCnNldXJhdF9FMTVFMTZQMVA0X3d0QGlkZW50ID0gZmFjdG9yKHNldXJhdF9FMTVFMTZQMVA0X3d0QGlkZW50LGxldmVscyhzZXVyYXRfRTE1RTE2UDFQNF93dEBpZGVudClbYyg1LDEsMTksMTcsNCwzLDE0LDE2LDIwLDExLDksMTAsMTMsMjEsMTIsMiw4LDYsMTgsMTUsNyldKQpEb3RQbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBjb2xzLnVzZSA9IGMoImxpZ2h0Z3JleSIsInJlZCIpLGdlbmVzLnBsb3QgPSBjKCJNa2k2NyIsIkVwY2FtIiwiVHJwNjMiLCJNdWM1YWMiLCJTcGRlZiIsIkNyZWIzbDEiLCJHcDIiLCJGb3hqMSIsIlNuYXAyNSIsIkNoZ2EiLCJQbHAxIiwiTXB6IiwiUGVjYW0xIiwiTHl2ZTEiLCJGY2VyMWciLCJDMXFhIiwiQ2QzZyIsIkFjdGEyIiwiTXloMTEiLCJSZ3M1IiwiTm90Y2gzIiwiV250MiIsIkx5NmEiLCJUaHkxIiwiQ2QzNCIsIkFjYW4iLCJDb2wyYTEiLCJUd2lzdDIiKSxncm91cC5ieSA9ICJpZGVudCIsIHgubGFiLnJvdCA9IFQscGxvdC5sZWdlbmQgPSBUKQpgYGAKYGBge3IsZmlnLmhlaWdodD02LGZpZy53aWR0aD0xMn0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJzcGVjaWZpY190eXBlIikKCnNldXJhdF9FMTVFMTZQMVA0X3d0QGlkZW50ID0gZmFjdG9yKHNldXJhdF9FMTVFMTZQMVA0X3d0QGlkZW50LGxldmVscyhzZXVyYXRfRTE1RTE2UDFQNF93dEBpZGVudClbYyg1LDEsMTksMTcsNCwzLDE0LDE2LDIwLDExLDksMTAsMTMsMjEsMTIsMiw4LDYsMTgsMTUsNyldKQpEb3RQbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBjb2xzLnVzZSA9IGMoImZvcmVzdGdyZWVuIiwibWFnZW50YTMiKSxnZW5lcy5wbG90ID0gYygiTWtpNjciLCJFcGNhbSIsIlRycDYzIiwiS3J0NSIsIktydDgiLCJTY2diM2EyIiwiTXVjNWFjIiwiU3BkZWYiLCJDcmViM2wxIiwiR3AyIiwiRm94ajEiLCJDZGhyMyIsIlNuYXAyNSIsIkFzY2wxIiwiQ2hnYSIsIlBscDEiLCJNcHoiLCJQZWNhbTEiLCJMeXZlMSIsIkZjZXIxZyIsIkNkM2ciLCJDMXFhIiwiQ3gzY3IxIiwiQWN0YTIiLCJNeWgxMSIsIlJnczUiLCJOb3RjaDMiLCJXbnQyIiwiTHk2YSIsIlBpMTYiLCJUaHkxIiwiQ2QzNCIsIkFjYW4iLCJTb3g5IiwiVHdpc3QyIiksZ3JvdXAuYnkgPSAiaWRlbnQiLCB4LmxhYi5yb3QgPSBULHBsb3QubGVnZW5kID0gVCxjb2wubWF4ID0gMixjb2wubWluID0gLTIpCmBgYAoKIyMjIyMgZXBpdGhsaWFsIGNlbGxzIGFjcm9zcyBhZ2VzOgpgYGB7cixmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD0xNX0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJyZXMuMS40IikKClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJUcnA2MyIsIlNwZGVmIiwiQ3JlYjNsMSIsIkZveGoxIiwiQ2VsbEN5Y2xlX3Njb3JlIiksIG5Db2wgPSA1LHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjIsaWRlbnQuaW5jbHVkZSA9IGMoMTEsOCwzLDksMSwyOSwzMCwyLDcsMjAsMjcsMjgpLGdyb3VwLmJ5PSJhZ2UiLCBsZWdlbmQucG9zaXRpb24gPSAibGVmdCIpCmBgYAoKYGBge3IsZmlnLmhlaWdodD01LCBmaWcud2lkdGg9OH0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJyZXMuMS40IikKClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJDZnRyIiwiQW5vMSIpLCBuQ29sID0gMix4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4yLGlkZW50LmluY2x1ZGUgPSBjKDExLDgsMyw5LDEsMjksMzAsMiw3LDIwLDI3LDI4KSxncm91cC5ieT0iYWdlIiwgbGVnZW5kLnBvc2l0aW9uID0gImxlZnQiKQpgYGAKCmBgYHtyfQpkZl93dDwtRmV0Y2hEYXRhKHNldXJhdF9FMTVFMTZQMVA0X3d0LGMoIkFubzEiLCJDZnRyIiwiS3J0NCIsIktydDEzIiwicmVzLjEuNCIsImFnZSIsInNlcV9ncm91cCIsImNlbGxfdHlwZSIsInNwZWNpZmljX3R5cGUiKSkKCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTEyfQpnZ3Bsb3QoZGZfd3RbZGZfd3QkcmVzLjEuNCAlaW4lIGMoMTEsOCwzLDksMSwyOSwzMCwyLDcsMjAsMjcsMjgpLF0sYWVzKHNwZWNpZmljX3R5cGUsQ2Z0cikpK2ZhY2V0X2dyaWQoLn5hZ2UpK2dlb21fZG90cGxvdChiaW5heGlzPSJ5IixhZXMoY29sb3I9YWdlLGZpbGw9YWdlKSxiaW53aWR0aD0wLjAyLHN0YWNrZGlyPSJjZW50ZXIiLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKDAuOCksIGRvdHNpemU9MC4wMTgpKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LGhqdXN0PTEpKQpgYGAKYGBge3IsIGZpZy5oZWlnaHQ9MywgZmlnLndpZHRoPTN9CmdncGxvdChkZl93dFtkZl93dCRyZXMuMS40ICVpbiUgYygxMSw4LDMsOSwxLDI5LDMwLDIsNywyMCwyNywyOCksXSxhZXMoYWdlLENmdHIpKStnZW9tX2RvdHBsb3QoYmluYXhpcz0ieSIsYWVzKGZpbGw9YWdlKSxiaW53aWR0aD0wLjA3LHN0YWNrZGlyPSJjZW50ZXIiLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKDAuOCksIGRvdHNpemU9MC4wMTgpKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LGhqdXN0PTEpKSsgc3RhdF9zdW1tYXJ5KGFlcyhjb2xvcj1hZ2UpLGZ1bi5kYXRhPW1lYW5fc2RsLCBmdW4uYXJncyA9IGxpc3QobXVsdD0xKSwgCiAgICAgICAgICAgICAgICAgZ2VvbT0icG9pbnRyYW5nZSIscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoMC43KSkKYGBgCmBgYHtyLCBmaWcuaGVpZ2h0PTMsIGZpZy53aWR0aD0zfQpnZ3Bsb3QoZGZfd3RbZGZfd3QkcmVzLjEuNCAlaW4lIGMoMTEsOCwzLDksMSwyOSwzMCwyLDcsMjAsMjcsMjgpLF0sYWVzKGFnZSxBbm8xKSkrZ2VvbV9kb3RwbG90KGJpbmF4aXM9InkiLGFlcyhmaWxsPWFnZSksYmlud2lkdGg9MC4wNyxzdGFja2Rpcj0iY2VudGVyIixwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgwLjgpLCBkb3RzaXplPTAuMDE4KSsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSxoanVzdD0xKSkrIHN0YXRfc3VtbWFyeShhZXMoY29sb3I9YWdlKSxmdW4uZGF0YT1tZWFuX3NkbCwgZnVuLmFyZ3MgPSBsaXN0KG11bHQ9MSksIAogICAgICAgICAgICAgICAgIGdlb209InBvaW50cmFuZ2UiLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKDAuNykpCmBgYApgYGB7ciwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9MTJ9CmdncGxvdChkZl93dFtkZl93dCRyZXMuMS40ICVpbiUgYygxMSw4LDMsOSwxLDI5LDMwLDIsNywyMCwyNywyOCksXSxhZXMoc3BlY2lmaWNfdHlwZSxBbm8xKSkrZmFjZXRfZ3JpZCgufmFnZSkrZ2VvbV9kb3RwbG90KGJpbmF4aXM9InkiLGFlcyhjb2xvcj1hZ2UsZmlsbD1hZ2UpLGJpbndpZHRoPTAuMDIsc3RhY2tkaXI9ImNlbnRlciIscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoMC44KSwgZG90c2l6ZT0wLjAxOCkrIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsaGp1c3Q9MSkpCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9MywgZmlnLndpZHRoPTEwfQpnZ3Bsb3QoZGZfd3RbZGZfd3QkcmVzLjEuNCAlaW4lIGMoMTEsOCwzLDksMSwyOSwzMCwyLDcsMjAsMjcsMjgpLF0sYWVzKGFnZSxBbm8xKSkrZmFjZXRfZ3JpZCgufnNwZWNpZmljX3R5cGUpK2dlb21fZG90cGxvdChiaW5heGlzPSJ5IixhZXMoY29sb3I9YWdlLGZpbGw9YWdlKSxiaW53aWR0aD0wLjA1LHN0YWNrZGlyPSJjZW50ZXIiLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKDAuOCksIGRvdHNpemU9MC4wMTgpKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LGhqdXN0PTEpKQpgYGAKCiMjIyMjIGFueSBwb3NzaWJsZSBpb25vY3l0ZXM/OgpgYGB7cixmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD0xNX0KVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoIkNmdHIiLCJGb3hpMSIpLCBuQ29sID0gMix4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4yLGlkZW50LmluY2x1ZGUgPSBjKDExLDgsMyw5LDEsMjksMzAsMiw3LDIwLDI3LDI4KSxncm91cC5ieT0iYWdlIiwgbGVnZW5kLnBvc2l0aW9uID0gImxlZnQiKQpgYGAKYGBge3J9CnRhYmxlKGRmX2FsbF93dCRyZXMuMS40W2RmX2FsbF93dCRGb3hpMT4wXSkKCmBgYAoKYGBge3J9CnRhYmxlKGRmX2FsbF93dCRyZXMuMS40W2RmX2FsbF93dCRDZnRyPjAgJiBkZl9hbGxfd3QkRm94aTE+MF0pCgpgYGAKIyMjIyMgZXBpdGhlbGlhbCBjZWxsIGNvbXBvc2l0aW9uIGFjcm9zcyBhZ2VzOgpgYGB7cixmaWcud2lkdGg9NSxmaWcuaGVpZ2h0PTV9CmdncGxvdChkYXRhPXNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YVtzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkcmVzLjEuNCAlaW4lIGMoMTEsOCwzLDksMSwyOSwzMCwyLDcsMjAsMjcsMjgpLF0sYWVzKGFnZSxmaWxsPXNwZWNpZmljX3R5cGUpKSsgCiAgICBnZW9tX2Jhcihwb3NpdGlvbj0iZmlsbCIpKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQpgYGAKYGBge3J9CnRhYmxlKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRhZ2Vbc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJHJlcy4xLjQgJWluJSBjKDExLDgsMyw5LDEsMjksMzAsMiw3LDIwLDI3LDI4KV0sc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJGNlbGxfdHlwZVtzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkcmVzLjEuNCAlaW4lIGMoMTEsOCwzLDksMSwyOSwzMCwyLDcsMjAsMjcsMjgpXSkKYGBgCgojIyMjIyBhIGZldyBsaW5lYWdlIG1hcmtlcnM6CmBgYHtyLGZpZy5oZWlnaHQ9MjAsZmlnLndpZHRoPTIwfQpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygiU294MTAiLCJNcHoiLCJTaGgiLCJQaG94MmEiLCJQaG94MmIiKSwgbkNvbCA9IDEseC5sYWIucm90ID0gVCxwb2ludC5zaXplLnVzZSA9IDAuMyx1c2UucmF3PUYsZ3JvdXAuYnk9InNwZWNpZmljX3R5cGUiKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygnI2U2MTk0YicsICcjM2NiNDRiJywgJyNmZmUxMTknLCAnIzQzNjNkOCcsICcjZjU4MjMxJywgJyM5MTFlYjQnLCAnIzQ2ZjBmMCcsICcjZjAzMmU2JywgJyNiY2Y2MGMnLCAnI2ZhYmViZScsICcjMDA4MDgwJywgJyNlNmJlZmYnLCAnIzlhNjMyNCcsICcjMDAwMDAwJywgJyNmZmZhYzgnLCAnIzgwMDAwMCcsICcjYWFmZmMzJywgJyM4MDgwMDAnLCAnI2ZmZDhiMScsICcjMDAwMDc1JywgJyM4MDgwODAnKSkKYGBgCiMjIyMjIGEgZmV3IGxpbmVhZ2UgbWFya2VyczoKYGBge3IsZmlnLmhlaWdodD00LGZpZy53aWR0aD0yMH0KVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoIlNveDEwIiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjMsdXNlLnJhdz1GLGdyb3VwLmJ5PSJzcGVjaWZpY190eXBlIikrc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoJyNlNjE5NGInLCAnIzNjYjQ0YicsICcjZmZlMTE5JywgJyM0MzYzZDgnLCAnI2Y1ODIzMScsICcjOTExZWI0JywgJyM0NmYwZjAnLCAnI2YwMzJlNicsICcjYmNmNjBjJywgJyNmYWJlYmUnLCAnIzAwODA4MCcsICcjZTZiZWZmJywgJyM5YTYzMjQnLCAnIzAwMDAwMCcsICcjZmZmYWM4JywgJyM4MDAwMDAnLCAnI2FhZmZjMycsICcjODA4MDAwJywgJyNmZmQ4YjEnLCAnIzAwMDA3NScsICcjODA4MDgwJykpCmBgYApgYGB7cixmaWcuaGVpZ2h0PTQsZmlnLndpZHRoPTIwfQpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygiTXB6IiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjMsdXNlLnJhdz1GLGdyb3VwLmJ5PSJzcGVjaWZpY190eXBlIikrc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoJyNlNjE5NGInLCAnIzNjYjQ0YicsICcjZmZlMTE5JywgJyM0MzYzZDgnLCAnI2Y1ODIzMScsICcjOTExZWI0JywgJyM0NmYwZjAnLCAnI2YwMzJlNicsICcjYmNmNjBjJywgJyNmYWJlYmUnLCAnIzAwODA4MCcsICcjZTZiZWZmJywgJyM5YTYzMjQnLCAnIzAwMDAwMCcsICcjZmZmYWM4JywgJyM4MDAwMDAnLCAnI2FhZmZjMycsICcjODA4MDAwJywgJyNmZmQ4YjEnLCAnIzAwMDA3NScsICcjODA4MDgwJykpCmBgYApgYGB7cixmaWcuaGVpZ2h0PTQsZmlnLndpZHRoPTIwfQpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygiU2hoIiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjMsdXNlLnJhdz1GLGdyb3VwLmJ5PSJzcGVjaWZpY190eXBlIikrc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoJyNlNjE5NGInLCAnIzNjYjQ0YicsICcjZmZlMTE5JywgJyM0MzYzZDgnLCAnI2Y1ODIzMScsICcjOTExZWI0JywgJyM0NmYwZjAnLCAnI2YwMzJlNicsICcjYmNmNjBjJywgJyNmYWJlYmUnLCAnIzAwODA4MCcsICcjZTZiZWZmJywgJyM5YTYzMjQnLCAnIzAwMDAwMCcsICcjZmZmYWM4JywgJyM4MDAwMDAnLCAnI2FhZmZjMycsICcjODA4MDAwJywgJyNmZmQ4YjEnLCAnIzAwMDA3NScsICcjODA4MDgwJykpCmBgYApgYGB7cixmaWcuaGVpZ2h0PTQsZmlnLndpZHRoPTIwfQpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygiUGhveDJhIiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjMsdXNlLnJhdz1GLGdyb3VwLmJ5PSJzcGVjaWZpY190eXBlIikrc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoJyNlNjE5NGInLCAnIzNjYjQ0YicsICcjZmZlMTE5JywgJyM0MzYzZDgnLCAnI2Y1ODIzMScsICcjOTExZWI0JywgJyM0NmYwZjAnLCAnI2YwMzJlNicsICcjYmNmNjBjJywgJyNmYWJlYmUnLCAnIzAwODA4MCcsICcjZTZiZWZmJywgJyM5YTYzMjQnLCAnIzAwMDAwMCcsICcjZmZmYWM4JywgJyM4MDAwMDAnLCAnI2FhZmZjMycsICcjODA4MDAwJywgJyNmZmQ4YjEnLCAnIzAwMDA3NScsICcjODA4MDgwJykpCmBgYApgYGB7cixmaWcuaGVpZ2h0PTQsZmlnLndpZHRoPTIwfQpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygiUGhveDJiIiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjMsdXNlLnJhdz1GLGdyb3VwLmJ5PSJzcGVjaWZpY190eXBlIikrc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoJyNlNjE5NGInLCAnIzNjYjQ0YicsICcjZmZlMTE5JywgJyM0MzYzZDgnLCAnI2Y1ODIzMScsICcjOTExZWI0JywgJyM0NmYwZjAnLCAnI2YwMzJlNicsICcjYmNmNjBjJywgJyNmYWJlYmUnLCAnIzAwODA4MCcsICcjZTZiZWZmJywgJyM5YTYzMjQnLCAnIzAwMDAwMCcsICcjZmZmYWM4JywgJyM4MDAwMDAnLCAnI2FhZmZjMycsICcjODA4MDAwJywgJyNmZmQ4YjEnLCAnIzAwMDA3NScsICcjODA4MDgwJykpCmBgYAoKYGBge3IsZmlnLmhlaWdodD04LGZpZy53aWR0aD0yMn0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q9YnVpbGRDbHVzdGVyVHJlZShzZXVyYXRfRTE1RTE2UDFQNF93dCxkby5yZW9yZGVyID0gRixyZW9yZGVyLm51bWVyaWMgPSBGLHBjcy51c2UgPSAxOjI0KQoKYGBgCgojIyMjIyBwb3RlbnRpYWwgbWVzZW5jaHltYWwgcHJvZ2VuaXRvcnM6CmBgYHtyfQpFMTVFMTZQMVA0X3d0X3JlczE0XzIyb3ZlcjMzPC1GaW5kTWFya2VycyhzZXVyYXRfRTE1RTE2UDFQNF93dCxpZGVudC4xPWMoMjIpLGlkZW50LjIgPSBjKDMzKSxvbmx5LnBvcyA9IFRSVUUpCkUxNUUxNlAxUDRfd3RfcmVzMTRfMjJvdmVyMzMKYGBgCmBgYHtyfQpFMTVFMTZQMVA0X3d0X3JlczE0XzMzb3ZlcjIyPC1GaW5kTWFya2VycyhzZXVyYXRfRTE1RTE2UDFQNF93dCxpZGVudC4xPWMoMzMpLGlkZW50LjIgPSBjKDIyKSxvbmx5LnBvcyA9IFRSVUUpCkUxNUUxNlAxUDRfd3RfcmVzMTRfMzNvdmVyMjIKYGBgCmBgYHtyfQpFMTVFMTZQMVA0X3d0X3JlczE0XzI1b3ZlcjIyPC1GaW5kTWFya2VycyhzZXVyYXRfRTE1RTE2UDFQNF93dCxpZGVudC4xPWMoMjUpLGlkZW50LjIgPSBjKDIyKSxvbmx5LnBvcyA9IFRSVUUpCkUxNUUxNlAxUDRfd3RfcmVzMTRfMjVvdmVyMjIKYGBgCgpgYGB7cixmaWcuaGVpZ2h0PTUsZmlnLndpZHRoPTI1fQpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygiUGllem8yIiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjMsdXNlLnJhdz1GLGdyb3VwLmJ5PSJyZXMuMS40IikKCmBgYApgYGB7cixmaWcuaGVpZ2h0PTQsZmlnLndpZHRoPTQ3fQpzZXVyYXRfRTE1RTE2UDFQNF93dCA8LSBTZXRBbGxJZGVudChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgaWQgPSAicmVzLjEuNCIpCgpEb0hlYXRtYXAob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGdlbmVzLnVzZSA9IGMoIlNveDkiLCJBY2FuIiwiQ29sMmExIiwiUGllem8yIiksIAogICAgc2xpbS5jb2wubGFiZWwgPSBUUlVFLCBncm91cC5sYWJlbC5yb3QgPSBUUlVFLHVzZS5zY2FsZWQgPSBULGdyb3VwLmJ5PSJyZXMuMS40Iixncm91cC5jZXggPSA0MCxjZXgucm93PTQwLGNlbGxzLnVzZSA9IHNldXJhdF9FMTVFMTZQMVA0X3d0QGNlbGwubmFtZXNbc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJHJlcy4xLjQgJWluJSBjKDE0LDMxLDIzLDE4LDIxLDEzLDE1LDE5LDE2LDEwLDEyLDYsNCwxNywwLDUsMzMsMjIsMjUpXSxncm91cC5vcmRlciA9IGMoMTAsMzMsMTIsNiwwLDIyLDUsNCwxMywxOCwxNywyNSwxNSwxOSwyMSwxNiwxNCwzMSwyMykKICApCmBgYAoKYGBge3IsZmlnLmhlaWdodD0xNSxmaWcud2lkdGg9NDZ9CnNldXJhdF9FMTVFMTZQMVA0X3d0IDwtIFNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJyZXMuMS40IikKCkRvSGVhdG1hcChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZ2VuZXMudXNlID0gYygiV250MiIsIkNkMzQiLCJQcm10MSIsIkVnZmw2IiwiQ3JhYnAyIiwiUGllem8yIiwiUmVnM2ciLCJZYngzIiwiS2xmOSIsIlpmcDM2IiwiTHBsIiwiUHRyZiIsIkx5NmEiLCJUcHBwMyIsIkFueGExIiwiTHk2YzEiLCJQaTE2IiwiVGh5MSIsIkFueGEzIiwiQ2NsNyIsIkNjbDIiKSwgCiAgICBzbGltLmNvbC5sYWJlbCA9IFRSVUUsIGdyb3VwLmxhYmVsLnJvdCA9IFRSVUUsdXNlLnNjYWxlZCA9IFQsZ3JvdXAuYnk9InJlcy4xLjQiLGdyb3VwLmNleCA9IDQwLGNleC5yb3c9NDAsY2VsbHMudXNlID0gc2V1cmF0X0UxNUUxNlAxUDRfd3RAY2VsbC5uYW1lc1tzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkcmVzLjEuNCAlaW4lIGMoMzMsMjIsMjUpXSxncm91cC5vcmRlciA9IGMoMzMsMjIsMjUpCiAgKQpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9MTUsZmlnLndpZHRoPTQ2fQpzZXVyYXRfRTE1RTE2UDFQNF93dCA8LSBTZXRBbGxJZGVudChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgaWQgPSAicmVzLjEuNCIpCgpEb0hlYXRtYXAob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGdlbmVzLnVzZSA9IGMoIldudDIiLCJDZDM0IiwiUHJtdDEiLCJFZ2ZsNiIsIkNyYWJwMiIsIlBpZXpvMiIsIlNvc3RkYzEiLCJZYngzIiwiS2xmOSIsIlpmcDM2IiwiUHRyZiIsIkxwbCIsIkx5NmEiLCJUcHBwMyIsIkx5NmMxIiwiUGkxNiIsIlRoeTEiLCJBbnhhMyIsIkFueGExIiwiQ2NsNyIsIkNjbDIiKSwgCiAgICBzbGltLmNvbC5sYWJlbCA9IFRSVUUsIGdyb3VwLmxhYmVsLnJvdCA9IFRSVUUsdXNlLnNjYWxlZCA9IFQsZ3JvdXAuYnk9ImFnZSIsZ3JvdXAuY2V4ID0gNDAsY2V4LnJvdz00MCxjZWxscy51c2UgPSBzZXVyYXRfRTE1RTE2UDFQNF93dEBjZWxsLm5hbWVzW3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRyZXMuMS40ICVpbiUgYygzMywyMiwyNSldCiAgKQpgYGAKCiMjIyMjIHNjR1BTIChzY29yaW5nKToKCmBgYHtyfQpnZW5lTGlzdDwtcmVhZC5jc3YoZmlsZSA9ICJHZW5lc09NSU1fYWxsLnR4dCIsaGVhZGVyPVQsc2VwPSJcdCIsc3RyaW5nc0FzRmFjdG9ycyA9IEYpIAojIEdlbmVzX3NjR1BTX2FsbC50eHQgYW5kIEdlbmVzT01JTV9hbGwudHh0IGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZS4gQm90aCBmaWxlcyBjYW4gYmUgdXNlZCBoZXJlLgpnZW5lTGlzdDwtbGFwcGx5KGdlbmVMaXN0LGZ1bmN0aW9uKHgpIHVubGlzdChzdHJzcGxpdCh1bmxpc3QoeCksc3BsaXQ9IiwiKSkpIApoZWFkKGdlbmVMaXN0JE11Y29jaWxpYXJ5KQpgYGAKCgpgYGB7cn0KbGlicmFyeShkcGx5cikKcGVyY2VudGlsZV90YWJsZV9FMTVFMTZQMVA0d3Q8LWFwcGx5KHNldXJhdF9FMTVFMTZQMVA0X3d0QGRhdGEsMSxwZXJjZW50X3JhbmspCmBgYApgYGB7cn0KcGVyY2VudGlsZV90YWJsZV9FMTVFMTZQMVA0d3RbMTo2LDE6Nl0gICNqdXN0IHRvIHRha2UgYSBsb29rIGF0IHRoZSBwZXJjZW50X3JhbmsKCmBgYApgYGB7cn0KIENlbGxDeWNsZV9zY29yZV93dDwtIGFwcGx5KHBlcmNlbnRpbGVfdGFibGVfRTE1RTE2UDFQNHd0Wyxjb2xuYW1lcyhwZXJjZW50aWxlX3RhYmxlX0UxNUUxNlAxUDR3dCkgJWluJSBnZW5lTGlzdCRDZWxsX2N5Y2xlXSwxLG1lYW4pCmBgYApgYGB7cn0KIGhlYWQoIENlbGxDeWNsZV9zY29yZV93dCkKYGBgCmBgYHtyfQpzZXVyYXRfRTE1RTE2UDFQNF93dDwtQWRkTWV0YURhdGEob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIG1ldGFkYXRhID0gQ2VsbEN5Y2xlX3Njb3JlX3d0LCBjb2wubmFtZSA9ICJDZWxsQ3ljbGVfc2NvcmUiKQoKYGBgCmBgYHtyLGZpZy5oZWlnaHQ9NSxmaWcud2lkdGg9MjV9ClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJDZWxsQ3ljbGVfc2NvcmUiKSwgbkNvbCA9IDEseC5sYWIucm90ID0gVCxwb2ludC5zaXplLnVzZSA9IDAuMyx1c2UucmF3PUYsZ3JvdXAuYnk9InJlcy4xLjQiKQoKYGBgCmBgYHtyfQp3dF9tb2Nvc2FHb2JsZXRfc2NvcmU8LSBhcHBseShwZXJjZW50aWxlX3RhYmxlX0UxNUUxNlAxUDR3dFssY29sbmFtZXMocGVyY2VudGlsZV90YWJsZV9FMTVFMTZQMVA0d3QpICVpbiUgZ2VuZUxpc3QkTXVjb3NhLmVwaXRoZWxpdW0uZ29ibGV0XSwxLG1lYW4pCmBgYAoKYGBge3J9CnNldXJhdF9FMTVFMTZQMVA0X3d0PC1BZGRNZXRhRGF0YShvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgbWV0YWRhdGEgPSB3dF9tb2Nvc2FHb2JsZXRfc2NvcmUsIGNvbC5uYW1lID0gIm11Y29zYUdvYmxldF9zY29yZSIpCgpgYGAKYGBge3IsZmlnLmhlaWdodD01LGZpZy53aWR0aD0yNX0KVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoIm11Y29zYUdvYmxldF9zY29yZSIpLCBuQ29sID0gMSx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4zLHVzZS5yYXc9Rixncm91cC5ieT0icmVzLjEuNCIpCgpgYGAKYGBge3IsZmlnLmhlaWdodD01LGZpZy53aWR0aD0yNX0KVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoIm11Y29zYUdvYmxldF9zY29yZSIpLCBuQ29sID0gMSx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4zLHVzZS5yYXc9Rixncm91cC5ieT0icmVzLjEuNCIsZG8uc29ydCA9IFQpCgpgYGAKCgpgYGB7cn0KIHd0X2NpbGlvcGF0aHlfdGFibGU8LSBwZXJjZW50aWxlX3RhYmxlX0UxNUUxNlAxUDR3dFssY29sbmFtZXMocGVyY2VudGlsZV90YWJsZV9FMTVFMTZQMVA0d3QpICVpbiUgZ2VuZUxpc3QkQ2lsaW9wYXRoeV0KYGBgCmBgYHtyfQogd3RfY2lsaW9wYXRoeV9zY29yZTwtIGFwcGx5KHd0X2NpbGlvcGF0aHlfdGFibGUsMSxtZWFuKQpgYGAKYGBge3J9CiBoZWFkKHd0X2NpbGlvcGF0aHlfc2NvcmUpCmBgYApgYGB7cn0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LUFkZE1ldGFEYXRhKG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBtZXRhZGF0YSA9IHd0X2NpbGlvcGF0aHlfc2NvcmUsIGNvbC5uYW1lID0gImNpbGlvcGF0aHlfc2NvcmUiKQoKYGBgCmBgYHtyLGZpZy5oZWlnaHQ9NSxmaWcud2lkdGg9MjV9ClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJjaWxpb3BhdGh5X3Njb3JlIiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjMsdXNlLnJhdz1GLGdyb3VwLmJ5PSJyZXMuMS40IikKCmBgYApgYGB7cn0KIHd0X1BDRF9zY29yZTwtIGFwcGx5KHBlcmNlbnRpbGVfdGFibGVfRTE1RTE2UDFQNHd0Wyxjb2xuYW1lcyhwZXJjZW50aWxlX3RhYmxlX0UxNUUxNlAxUDR3dCkgJWluJSBnZW5lTGlzdCRQcmltYXJ5LmNpbGlhcnkuZHlza2luZXNpYV0sMSxtZWFuKQpgYGAKYGBge3J9CiBoZWFkKHd0X1BDRF9zY29yZSkKYGBgCgpgYGB7cn0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LUFkZE1ldGFEYXRhKG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBtZXRhZGF0YSA9IHd0X1BDRF9zY29yZSwgY29sLm5hbWUgPSAiUENEX3Njb3JlIikKCmBgYAoKYGBge3IsZmlnLmhlaWdodD01LGZpZy53aWR0aD0yNX0KVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoIlBDRF9zY29yZSIpLCBuQ29sID0gMSx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4zLHVzZS5yYXc9Rixncm91cC5ieT0icmVzLjEuNCIpCgpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9NSxmaWcud2lkdGg9MTB9CnNldXJhdF9FMTVFMTZQMVA0X3d0PC1TZXRBbGxJZGVudChzZXVyYXRfRTE1RTE2UDFQNF93dCxpZD0ic3BlY2lmaWNfdHlwZSIpClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJQQ0Rfc2NvcmUiKSwgbkNvbCA9IDEseC5sYWIucm90ID0gVCxwb2ludC5zaXplLnVzZSA9IDAuMyx1c2UucmF3PUYsZ3JvdXAuYnk9InNwZWNpZmljX3R5cGUiLGRvLnNvcnQgPSBGLGlkZW50LmluY2x1ZGUgPSBjKCJDeWNsaW5nRXBpdGhlbGlhbCIsIkJhc2FsIiwiVHJhbnNpdGlvbmFsIiwiU2VjcmV0b3J5IiwiQ2lsaWF0ZWQiLCJDaWxpYVNlY3JldG9yeSIsIkZpYnJvYmxhc3QiLCJDeWNsaW5nRmlicm9ibGFzdCIsIk1lc2VuY2h5bWFsUHJvZ2VuaXRvciIsIkNob25kcm9jeXRlIiwiTXVzY2xlIiwiVlNNQy9wZXJpY3l0ZSIsIkx5bXBoYXRpY0VuZG90aGVsaWFsIiwiVmFzY3VsYXJFbmRvdGhlbGlhbCIsIkltbXVuZV8xIiwiSW1tdW5lXzIiLCJTY2h3YW5uQ2VsbCIsIk5ldXJvbi9ORUMiKSkKCmBgYAoKYGBge3IsZmlnLmhlaWdodD01LGZpZy53aWR0aD0xMH0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KHNldXJhdF9FMTVFMTZQMVA0X3d0LGlkPSJzcGVjaWZpY190eXBlIikKVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoIlBDRF9zY29yZSIpLCBuQ29sID0gMSx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4zLHVzZS5yYXc9Rixncm91cC5ieT0ic3BlY2lmaWNfdHlwZSIsZG8uc29ydCA9IEYsaWRlbnQuaW5jbHVkZSA9IGMoIkN5Y2xpbmdFcGl0aGVsaWFsIiwiQmFzYWwiLCJUcmFuc2l0aW9uYWwiLCJTZWNyZXRvcnkiLCJDaWxpYXRlZCIsIkNpbGlhU2VjcmV0b3J5IiwiRmlicm9ibGFzdCIsIkN5Y2xpbmdGaWJyb2JsYXN0IiwiTWVzZW5jaHltYWxQcm9nZW5pdG9yIiwiQ2hvbmRyb2N5dGUiLCJNdXNjbGUiLCJWU01DL3BlcmljeXRlIiwiTHltcGhhdGljRW5kb3RoZWxpYWwiLCJWYXNjdWxhckVuZG90aGVsaWFsIiwiSW1tdW5lXzEiLCJJbW11bmVfMiIsIlNjaHdhbm5DZWxsIiwiTmV1cm9uL05FQyIpKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygnI2U2MTk0YicsICcjM2NiNDRiJywgJyNmZmUxMTknLCAnIzQzNjNkOCcsICcjZjU4MjMxJywgJyM5MTFlYjQnLCAnI2YwMzJlNicsICcjYmNmNjBjJywgJyNmYWJlYmUnLCAnIzAwODA4MCcsICcjZTZiZWZmJywgJyM5YTYzMjQnLCAnIzAwMDAwMCcsICcjODAwMDAwJywgJyNhYWZmYzMnLCAnI2ZmZDhiMScsICcjMDAwMDc1JywgJyM4MDgwODAnCikpCgpgYGAKYGBge3IsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTV9CgpnZ3Bsb3Qoc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhW3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRzcGVjaWZpY190eXBlICVpbiUgYygiQ2lsaWF0ZWQiLCJDaWxpYVNlY3JldG9yeSIpLF0sYWVzKGFnZSxQQ0Rfc2NvcmUpKStmYWNldF9ncmlkKC5+c3BlY2lmaWNfdHlwZSkrZ2VvbV9kb3RwbG90KGJpbmF4aXM9InkiLGFlcyhmaWxsPWFnZSksYmlud2lkdGg9MC4wMSxzdGFja2Rpcj0iY2VudGVyIixwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgwLjgpLCBkb3RzaXplPTAuMikrc3RhdF9jb21wYXJlX21lYW5zKGNvbXBhcmlzb25zID0gbGlzdChjKCJFMTYiLCAiUDEiKSxjKCJQMSIsICJQNCIpLGMoIkUxNiIsICJQNCIpKSxtZXRob2Q9IndpbGNveC50ZXN0IixzaXplPTQsbGFiZWw9InAuYWRqIikrIHN0YXRfc3VtbWFyeShhZXMoY29sb3I9YWdlKSxmdW4uZGF0YT1tZWFuX3NkbCwgZnVuLmFyZ3MgPSBsaXN0KG11bHQ9MSksIAogICAgICAgICAgICAgICAgIGdlb209InBvaW50cmFuZ2UiLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKDAuNykpKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LGhqdXN0PTEpLHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgY29sb3VyID0gImJsYWNrIiwgYW5nbGUgPSAwKSkKYGBgCgoKCgpgYGB7cixmaWcuaGVpZ2h0PTUsZmlnLndpZHRoPTN9CnNldXJhdF9FMTVFMTZQMVA0X3d0PC1TZXRBbGxJZGVudChzZXVyYXRfRTE1RTE2UDFQNF93dCxpZD0ic3BlY2lmaWNfdHlwZSIpClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJQQ0Rfc2NvcmUiKSwgbkNvbCA9IDEseC5sYWIucm90ID0gVCxwb2ludC5zaXplLnVzZSA9IDAuMyx1c2UucmF3PUYsZ3JvdXAuYnk9ImFnZSIsZG8uc29ydCA9IEYsaWRlbnQuaW5jbHVkZSA9IGMoIkNpbGlhU2VjcmV0b3J5IikpCgpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9NSxmaWcud2lkdGg9MTB9CnNldXJhdF9FMTVFMTZQMVA0X3d0PC1TZXRBbGxJZGVudChzZXVyYXRfRTE1RTE2UDFQNF93dCxpZD0ic3BlY2lmaWNfdHlwZSIpClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJtdWNvc2FHb2JsZXRfc2NvcmUiKSwgbkNvbCA9IDEseC5sYWIucm90ID0gVCxwb2ludC5zaXplLnVzZSA9IDAuMyx1c2UucmF3PUYsZ3JvdXAuYnk9InNwZWNpZmljX3R5cGUiLGRvLnNvcnQgPSBGLGlkZW50LmluY2x1ZGUgPSBjKCJDeWNsaW5nRXBpdGhlbGlhbCIsIkJhc2FsIiwiVHJhbnNpdGlvbmFsIiwiU2VjcmV0b3J5IiwiQ2lsaWF0ZWQiLCJDaWxpYVNlY3JldG9yeSIsIkZpYnJvYmxhc3QiLCJDeWNsaW5nRmlicm9ibGFzdCIsIk1lc2VuY2h5bWFsUHJvZ2VuaXRvciIsIkNob25kcm9jeXRlIiwiTXVzY2xlIiwiVlNNQy9wZXJpY3l0ZSIsIkx5bXBoYXRpY0VuZG90aGVsaWFsIiwiVmFzY3VsYXJFbmRvdGhlbGlhbCIsIkltbXVuZV8xIiwiSW1tdW5lXzIiLCJTY2h3YW5uQ2VsbCIsIk5ldXJvbi9ORUMiKSkrc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoJyNlNjE5NGInLCAnIzNjYjQ0YicsICcjZmZlMTE5JywgJyM0MzYzZDgnLCAnI2Y1ODIzMScsICcjOTExZWI0JywgJyNmMDMyZTYnLCAnI2JjZjYwYycsICcjZmFiZWJlJywgJyMwMDgwODAnLCAnI2U2YmVmZicsICcjOWE2MzI0JywgJyMwMDAwMDAnLCAnIzgwMDAwMCcsICcjYWFmZmMzJywgJyNmZmQ4YjEnLCAnIzAwMDA3NScsICcjODA4MDgwJwopKQoKYGBgCmBgYHtyLGZpZy5oZWlnaHQ9NSxmaWcud2lkdGg9M30Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KHNldXJhdF9FMTVFMTZQMVA0X3d0LGlkPSJzcGVjaWZpY190eXBlIikKVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoIm11Y29zYUdvYmxldF9zY29yZSIpLCBuQ29sID0gMSx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4zLHVzZS5yYXc9Rixncm91cC5ieT0iYWdlIixkby5zb3J0ID0gRixpZGVudC5pbmNsdWRlID0gYygiU2VjcmV0b3J5IikpCgpgYGAKYGBge3IsZmlnLmhlaWdodD01LGZpZy53aWR0aD0zfQpzZXVyYXRfRTE1RTE2UDFQNF93dDwtU2V0QWxsSWRlbnQoc2V1cmF0X0UxNUUxNlAxUDRfd3QsaWQ9InNwZWNpZmljX3R5cGUiKQpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygibXVjb3NhR29ibGV0X3Njb3JlIiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjMsdXNlLnJhdz1GLGdyb3VwLmJ5PSJhZ2UiLGRvLnNvcnQgPSBGLGlkZW50LmluY2x1ZGUgPSBjKCJDaWxpYVNlY3JldG9yeSIpKQoKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9NX0KCmdncGxvdChzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGFbc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJHNwZWNpZmljX3R5cGUgJWluJSBjKCJTZWNyZXRvcnkiLCJDaWxpYVNlY3JldG9yeSIpLF0sYWVzKGFnZSxtdWNvc2FHb2JsZXRfc2NvcmUpKStmYWNldF9ncmlkKC5+c3BlY2lmaWNfdHlwZSkrZ2VvbV9kb3RwbG90KGJpbmF4aXM9InkiLGFlcyhmaWxsPWFnZSksYmlud2lkdGg9MC4wMSxzdGFja2Rpcj0iY2VudGVyIixwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgwLjgpLCBkb3RzaXplPTAuMikrc3RhdF9jb21wYXJlX21lYW5zKGNvbXBhcmlzb25zID0gbGlzdChjKCJFMTYiLCAiUDEiKSxjKCJQMSIsICJQNCIpLGMoIkUxNiIsICJQNCIpKSxtZXRob2Q9IndpbGNveC50ZXN0IixzaXplPTQsbGFiZWw9InAuYWRqIikrIHN0YXRfc3VtbWFyeShhZXMoY29sb3I9YWdlKSxmdW4uZGF0YT1tZWFuX3NkbCwgZnVuLmFyZ3MgPSBsaXN0KG11bHQ9MSksIAogICAgICAgICAgICAgICAgIGdlb209InBvaW50cmFuZ2UiLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKDAuNykpKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LGhqdXN0PTEpLHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgY29sb3VyID0gImJsYWNrIiwgYW5nbGUgPSAwKSkKYGBgCgpgYGB7cn0KIHd0X2Jyb25jaGl0aXNfc2NvcmU8LSBhcHBseShwZXJjZW50aWxlX3RhYmxlX0UxNUUxNlAxUDR3dFssY29sbmFtZXMocGVyY2VudGlsZV90YWJsZV9FMTVFMTZQMVA0d3QpICVpbiUgZ2VuZUxpc3QkQnJvbmNoaWVjdGFzaXMuYW5kLkJyb25jaGl0aXNdLDEsbWVhbikKYGBgCmBgYHtyfQogaGVhZCh3dF9icm9uY2hpdGlzX3Njb3JlKQpgYGAKCmBgYHtyfQpzZXVyYXRfRTE1RTE2UDFQNF93dDwtQWRkTWV0YURhdGEob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIG1ldGFkYXRhID0gd3RfYnJvbmNoaXRpc19zY29yZSwgY29sLm5hbWUgPSAiQnJvbmNoaWVjdGFzaXNfQnJvbmNoaXRpcyIpCgpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9NSxmaWcud2lkdGg9MjV9ClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJCcm9uY2hpZWN0YXNpc19Ccm9uY2hpdGlzIiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjMsdXNlLnJhdz1GLGdyb3VwLmJ5PSJyZXMuMS40IikKCmBgYApgYGB7cixmaWcuaGVpZ2h0PTUsZmlnLndpZHRoPTEwfQpzZXVyYXRfRTE1RTE2UDFQNF93dDwtU2V0QWxsSWRlbnQoc2V1cmF0X0UxNUUxNlAxUDRfd3QsaWQ9InNwZWNpZmljX3R5cGUiKQpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygiQnJvbmNoaWVjdGFzaXNfQnJvbmNoaXRpcyIpLCBuQ29sID0gMSx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4zLHVzZS5yYXc9Rixncm91cC5ieT0ic3BlY2lmaWNfdHlwZSIsZG8uc29ydCA9IEYsaWRlbnQuaW5jbHVkZSA9IGMoIkN5Y2xpbmdFcGl0aGVsaWFsIiwiQmFzYWwiLCJUcmFuc2l0aW9uYWwiLCJTZWNyZXRvcnkiLCJDaWxpYXRlZCIsIkNpbGlhU2VjcmV0b3J5IiwiRmlicm9ibGFzdCIsIkN5Y2xpbmdGaWJyb2JsYXN0IiwiTWVzZW5jaHltYWxQcm9nZW5pdG9yIiwiQ2hvbmRyb2N5dGUiLCJNdXNjbGUiLCJWU01DL3BlcmljeXRlIiwiTHltcGhhdGljRW5kb3RoZWxpYWwiLCJWYXNjdWxhckVuZG90aGVsaWFsIiwiSW1tdW5lXzEiLCJJbW11bmVfMiIsIlNjaHdhbm5DZWxsIiwiTmV1cm9uL05FQyIpKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygnI2U2MTk0YicsICcjM2NiNDRiJywgJyNmZmUxMTknLCAnIzQzNjNkOCcsICcjZjU4MjMxJywgJyM5MTFlYjQnLCAnI2YwMzJlNicsICcjYmNmNjBjJywgJyNmYWJlYmUnLCAnIzAwODA4MCcsICcjZTZiZWZmJywgJyM5YTYzMjQnLCAnIzAwMDAwMCcsICcjODAwMDAwJywgJyNhYWZmYzMnLCAnI2ZmZDhiMScsICcjMDAwMDc1JywgJyM4MDgwODAnCikpCgpgYGAKCgoKYGBge3J9CiB3dF9DT1BEX3Njb3JlPC0gYXBwbHkocGVyY2VudGlsZV90YWJsZV9FMTVFMTZQMVA0d3RbLGNvbG5hbWVzKHBlcmNlbnRpbGVfdGFibGVfRTE1RTE2UDFQNHd0KSAlaW4lIGdlbmVMaXN0JENPUERdLDEsbWVhbikKYGBgCmBgYHtyfQogaGVhZCh3dF9DT1BEX3Njb3JlKQpgYGAKCmBgYHtyfQpzZXVyYXRfRTE1RTE2UDFQNF93dDwtQWRkTWV0YURhdGEob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIG1ldGFkYXRhID0gd3RfQ09QRF9zY29yZSwgY29sLm5hbWUgPSAiQ09QRCIpCgpgYGAKCgpgYGB7cixmaWcuaGVpZ2h0PTUsZmlnLndpZHRoPTEwfQpzZXVyYXRfRTE1RTE2UDFQNF93dDwtU2V0QWxsSWRlbnQoc2V1cmF0X0UxNUUxNlAxUDRfd3QsaWQ9InNwZWNpZmljX3R5cGUiKQpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygiQ09QRCIpLCBuQ29sID0gMSx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4zLHVzZS5yYXc9Rixncm91cC5ieT0ic3BlY2lmaWNfdHlwZSIsZG8uc29ydCA9IEYsaWRlbnQuaW5jbHVkZSA9IGMoIkN5Y2xpbmdFcGl0aGVsaWFsIiwiQmFzYWwiLCJUcmFuc2l0aW9uYWwiLCJTZWNyZXRvcnkiLCJDaWxpYXRlZCIsIkNpbGlhU2VjcmV0b3J5IiwiRmlicm9ibGFzdCIsIkN5Y2xpbmdGaWJyb2JsYXN0IiwiTWVzZW5jaHltYWxQcm9nZW5pdG9yIiwiQ2hvbmRyb2N5dGUiLCJNdXNjbGUiLCJWU01DL3BlcmljeXRlIiwiTHltcGhhdGljRW5kb3RoZWxpYWwiLCJWYXNjdWxhckVuZG90aGVsaWFsIiwiSW1tdW5lXzEiLCJJbW11bmVfMiIsIlNjaHdhbm5DZWxsIiwiTmV1cm9uL05FQyIpKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygnI2U2MTk0YicsICcjM2NiNDRiJywgJyNmZmUxMTknLCAnIzQzNjNkOCcsICcjZjU4MjMxJywgJyM5MTFlYjQnLCAnI2YwMzJlNicsICcjYmNmNjBjJywgJyNmYWJlYmUnLCAnIzAwODA4MCcsICcjZTZiZWZmJywgJyM5YTYzMjQnLCAnIzAwMDAwMCcsICcjODAwMDAwJywgJyNhYWZmYzMnLCAnI2ZmZDhiMScsICcjMDAwMDc1JywgJyM4MDgwODAnCikpCgpgYGAKCmBgYHtyfQogd3RfYXN0aG1hX3Njb3JlPC0gYXBwbHkocGVyY2VudGlsZV90YWJsZV9FMTVFMTZQMVA0d3RbLGNvbG5hbWVzKHBlcmNlbnRpbGVfdGFibGVfRTE1RTE2UDFQNHd0KSAlaW4lIGdlbmVMaXN0JFB1bG1vbmFyeS4uLkFzdGhtYV0sMSxtZWFuKQpgYGAKYGBge3J9CiBoZWFkKHd0X2FzdGhtYV9zY29yZSkKYGBgCgpgYGB7cn0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LUFkZE1ldGFEYXRhKG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBtZXRhZGF0YSA9IHd0X2FzdGhtYV9zY29yZSwgY29sLm5hbWUgPSAiQXN0aG1hIikKCmBgYAoKYGBge3IsZmlnLmhlaWdodD01LGZpZy53aWR0aD0xMH0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KHNldXJhdF9FMTVFMTZQMVA0X3d0LGlkPSJzcGVjaWZpY190eXBlIikKVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoIkFzdGhtYSIpLCBuQ29sID0gMSx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4zLHVzZS5yYXc9Rixncm91cC5ieT0ic3BlY2lmaWNfdHlwZSIsZG8uc29ydCA9IEYsaWRlbnQuaW5jbHVkZSA9IGMoIkN5Y2xpbmdFcGl0aGVsaWFsIiwiQmFzYWwiLCJUcmFuc2l0aW9uYWwiLCJTZWNyZXRvcnkiLCJDaWxpYXRlZCIsIkNpbGlhU2VjcmV0b3J5IiwiRmlicm9ibGFzdCIsIkN5Y2xpbmdGaWJyb2JsYXN0IiwiTWVzZW5jaHltYWxQcm9nZW5pdG9yIiwiQ2hvbmRyb2N5dGUiLCJNdXNjbGUiLCJWU01DL3BlcmljeXRlIiwiTHltcGhhdGljRW5kb3RoZWxpYWwiLCJWYXNjdWxhckVuZG90aGVsaWFsIiwiSW1tdW5lXzEiLCJJbW11bmVfMiIsIlNjaHdhbm5DZWxsIiwiTmV1cm9uL05FQyIpKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygnI2U2MTk0YicsICcjM2NiNDRiJywgJyNmZmUxMTknLCAnIzQzNjNkOCcsICcjZjU4MjMxJywgJyM5MTFlYjQnLCAnI2YwMzJlNicsICcjYmNmNjBjJywgJyNmYWJlYmUnLCAnIzAwODA4MCcsICcjZTZiZWZmJywgJyM5YTYzMjQnLCAnIzAwMDAwMCcsICcjODAwMDAwJywgJyNhYWZmYzMnLCAnI2ZmZDhiMScsICcjMDAwMDc1JywgJyM4MDgwODAnCikpCgpgYGAKYGBge3IsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9CgpnZ3Bsb3Qoc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhW3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRzcGVjaWZpY190eXBlICVpbiUgYygiU2VjcmV0b3J5IiwiQ2lsaWFTZWNyZXRvcnkiLCJJbW11bmVfMSIpLF0sYWVzKGFnZSxBc3RobWEpKStmYWNldF9ncmlkKC5+c3BlY2lmaWNfdHlwZSkrZ2VvbV9kb3RwbG90KGJpbmF4aXM9InkiLGFlcyhmaWxsPWFnZSksYmlud2lkdGg9MC4wMDUsc3RhY2tkaXI9ImNlbnRlciIscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoMC44KSwgZG90c2l6ZT0wLjIpK3N0YXRfY29tcGFyZV9tZWFucyhjb21wYXJpc29ucyA9IGxpc3QoYygiRTE2IiwgIlAxIiksYygiUDEiLCAiUDQiKSxjKCJFMTYiLCAiUDQiKSksbWV0aG9kPSJ3aWxjb3gudGVzdCIsc2l6ZT00LGxhYmVsPSJwLmFkaiIpKyBzdGF0X3N1bW1hcnkoYWVzKGNvbG9yPWFnZSksZnVuLmRhdGE9bWVhbl9zZGwsIGZ1bi5hcmdzID0gbGlzdChtdWx0PTEpLCAKICAgICAgICAgICAgICAgICBnZW9tPSJwb2ludHJhbmdlIixwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgwLjcpKSsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSxoanVzdD0xKSxzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGNvbG91ciA9ICJibGFjayIsIGFuZ2xlID0gMCkpCmBgYAoKIyMjIyMgY2hlY2sgc29tZSBodW1hbiBHV0FTOgoKYGBge3IsZmlnLmhlaWdodD02LGZpZy53aWR0aD0xMH0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJzcGVjaWZpY190eXBlIikKCnNldXJhdF9FMTVFMTZQMVA0X3d0QGlkZW50ID0gZmFjdG9yKHNldXJhdF9FMTVFMTZQMVA0X3d0QGlkZW50LGxldmVscyhzZXVyYXRfRTE1RTE2UDFQNF93dEBpZGVudClbYyg1LDEsMTksMTcsNCwzLDE0LDE2LDIwLDExLDksMTAsMTMsMjEsMTIsMiw4LDYsMTgsMTUsNyldKQpEb3RQbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBjb2xzLnVzZSA9IGMoImZvcmVzdGdyZWVuIiwibWFnZW50YTMiKSxnZW5lcy5wbG90ID0gYygiTXVjNCIsIk11YzIwIiwiQWd0cjIiLCJTbGM2YTE0IiwiRWhmIiwiQXBpcCIsIkhoaXAiLCJDaHJuYTUiLCJIdHI0IiwiQWRncmc2IiwiVGhzZDQiLCJGYW0xM2EiLCJHc3RjZCIsIlJpbjMiLCJBZGFtMTkiLCJUZXQyIiwiRWVmc2VjIiwiQ2ZkcDEiLCJUZ2ZiMiIsIkFnZXIiLCJTZ2YyOSIsIkFybWMyIiwiUGlkMSIsIkRzcCIsIk10Y2wxIiwiUmFyYiIsIlNmdHBkIiwiQ3lwMmE0IiwiQ3lwMmE1IiksZ3JvdXAuYnkgPSAiaWRlbnQiLCB4LmxhYi5yb3QgPSBULHBsb3QubGVnZW5kID0gVCkKYGBgCgoKIyMjIyMgQ0YgR1dBUzoKYGBge3IsZmlnLmhlaWdodD00LGZpZy53aWR0aD02fQpzZXVyYXRfRTE1RTE2UDFQNF93dDwtU2V0QWxsSWRlbnQob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGlkID0gInNwZWNpZmljX3R5cGUiKQoKc2V1cmF0X0UxNUUxNlAxUDRfd3RAaWRlbnQgPSBmYWN0b3Ioc2V1cmF0X0UxNUUxNlAxUDRfd3RAaWRlbnQsbGV2ZWxzKHNldXJhdF9FMTVFMTZQMVA0X3d0QGlkZW50KVtjKDUsMSwxOSwxNyw0LDMsMTQsMTYsMjAsMTEsOSwxMCwxMywyMSwxMiwyLDgsNiwxOCwxNSw3KV0pCkRvdFBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGNvbHMudXNlID0gYygiZm9yZXN0Z3JlZW4iLCJtYWdlbnRhMyIpLGdlbmVzLnBsb3QgPSBjKCJNdWM0IiwiTXVjMjAiLCJBZ3RyMiIsIlNsYzZhMTQiLCJFaGYiLCJBcGxwMSIsIkFwbHAyIiwiSDItQWEiLCJIMi1BYjEiLCJIMi1FYjEiLCJIMi1FYjIiKSxncm91cC5ieSA9ICJpZGVudCIsIHgubGFiLnJvdCA9IFQscGxvdC5sZWdlbmQgPSBUKQpgYGAKCiMjIyMjIENPUEQ6CmBgYHtyLGZpZy5oZWlnaHQ9NCxmaWcud2lkdGg9OX0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJzcGVjaWZpY190eXBlIikKc2V1cmF0X0UxNUUxNlAxUDRfd3RAaWRlbnQgPSBmYWN0b3Ioc2V1cmF0X0UxNUUxNlAxUDRfd3RAaWRlbnQsbGV2ZWxzKHNldXJhdF9FMTVFMTZQMVA0X3d0QGlkZW50KVtjKDUsMSwxOSwxNyw0LDMsMTQsMTYsMjAsMTEsOSwxMCwxMywyMSwxMiwyLDgsNiwxOCwxNSw3KV0pCkRvdFBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGNvbHMudXNlID0gYygiZm9yZXN0Z3JlZW4iLCJtYWdlbnRhMyIpLGdlbmVzLnBsb3QgPSBjKCJIaGlwIiwiQ2hybmE1IiwiSHRyNCIsIkFkZ3JnNiIsIlRoc2Q0IiwiRmFtMTNhIiwiR3N0Y2QiLCJSaW4zIiwiQWRhbTE5IiwiVGV0MiIsIkVlZnNlYyIsIkNmZHAxIiwiVGdmYjIiLCJBZ2VyIiwiU2dmMjkiLCJBcm1jMiIsIlBpZDEiLCJEc3AiLCJNdGNsMSIsIlJhcmIiLCJTZnRwZCIsIkN5cDJhNCIsIkN5cDJhNSIpLGdyb3VwLmJ5ID0gImlkZW50IiwgeC5sYWIucm90ID0gVCxwbG90LmxlZ2VuZCA9IFQpCmBgYAoKIyMjIyMgRGV2ZWxvcG1lbnRhbCBsYW5zY2FwZToKIyMjIyMgYmFzYWwgY2VsbHMgYWNyb3NzIHRpbWU6CmBgYHtyfQpzZXVyYXRfRTE1RTE2UDFQNF93dCA8LSBTZXRBbGxJZGVudChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgaWQgPSAicmVzLjEuNCIpCgpFMTVFMTZQMVA0X3d0X3JlczE0XzNvdmVyMTwtRmluZE1hcmtlcnMoc2V1cmF0X0UxNUUxNlAxUDRfd3QsaWRlbnQuMT1jKDMpLGlkZW50LjIgPSBjKDEpLG9ubHkucG9zID0gVFJVRSkKRTE1RTE2UDFQNF93dF9yZXMxNF8zb3ZlcjEKYGBgCgpgYGB7cn0Kd3JpdGUudGFibGUoRTE1RTE2UDFQNF93dF9yZXMxNF8zb3ZlcjEsIkUxNUUxNlAxUDRfd3RfcmVzMTRfM292ZXIxLnR4dCIsc2VwPSJcdCIpCgpgYGAKCgpgYGB7cn0KRTE1RTE2UDFQNF93dF9yZXMxNF8xb3ZlcjM8LUZpbmRNYXJrZXJzKHNldXJhdF9FMTVFMTZQMVA0X3d0LGlkZW50LjE9YygxKSxpZGVudC4yID0gYygzKSxvbmx5LnBvcyA9IFRSVUUpCkUxNUUxNlAxUDRfd3RfcmVzMTRfMW92ZXIzCmBgYAoKYGBge3J9CndyaXRlLnRhYmxlKEUxNUUxNlAxUDRfd3RfcmVzMTRfMW92ZXIzLCJFMTVFMTZQMVA0X3d0X3JlczE0XzFvdmVyMy50eHQiLHNlcD0iXHQiKQoKYGBgCgoKYGBge3J9CkUxNUUxNlAxUDRfd3RfcmVzMTRfMjlvdmVyMTwtRmluZE1hcmtlcnMoc2V1cmF0X0UxNUUxNlAxUDRfd3QsaWRlbnQuMT1jKDI5KSxpZGVudC4yID0gYygxKSxvbmx5LnBvcyA9IFRSVUUpCkUxNUUxNlAxUDRfd3RfcmVzMTRfMjlvdmVyMQpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9MTUsZmlnLndpZHRoPTQwfQoKRG9IZWF0bWFwKG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBnZW5lcy51c2UgPSBjKCJFcGNhbSIsIlRycDYzIiwiQ2xkbjYiLCJObmF0IiwiSWQyIiwiSWQzIiwiV250N2IiLCJXbnQ2IiwiV250NCIsIkJtcDciLCJLcnQxNSIsIktydDUiLCJDeXAyZjIiLCJMYnAiLCJCQzA0ODU0NiIsIkx5NmUiLCJBcXAzIiwiQXFwNCIsIldudDQiLCJSZXRubGEiLCJJdGxuMSIsIkx0ZiIsIlNjZ2IxYTEiLCJBcXA1IiwiRXJyZmkxIiwiRXBhczEiLCJScGw5LXBzNiIsIlJwbDEzLXBzMyIsIlJwbDZsIiksIAogICAgc2xpbS5jb2wubGFiZWwgPSBUUlVFLCBncm91cC5sYWJlbC5yb3QgPSBUUlVFLHVzZS5zY2FsZWQgPSBULGdyb3VwLmJ5PSJyZXMuMS40Iixncm91cC5jZXggPSA1MCxjZXgucm93PTQwLGNlbGxzLnVzZSA9IHNldXJhdF9FMTVFMTZQMVA0X3d0QGNlbGwubmFtZXNbc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJHJlcy4xLjQgJWluJSBjKDMsOCwxMSw5LDEsMzAsMiwyMCwyOSw3LDI2LDI3LDI4LDI0KV0sZ3JvdXAub3JkZXIgPSBjKDMsOCwxMSw5LDEsMzAsMiwyMCwyOSw3LDI3LDI4LDI2LDI0KQogICkKYGBgCgpgYGB7cixmaWcuaGVpZ2h0PTI4LCBmaWcud2lkdGg9MTJ9ClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJBcXAxIiwiQXFwMiIsIkFxcDMiLCJBcXA0IiwiQXFwNSIsIkFxcDYiLCJBcXA3IiwiQXFwOCIsIkFxcDkiLCJBcXAxMSIsIkFxcDEyIiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjIpCmBgYAoKYGBge3IsZmlnLmhlaWdodD02LGZpZy53aWR0aD0yMH0KRG9IZWF0bWFwKG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBnZW5lcy51c2UgPSBjKCJUcnA2MyIsIkNsZG42IiwiTm5hdCIsIklkMiIsIklkMyIsIldudDdiIiwiS3J0NSIsIktydDE1IiwiS3J0MTQiLCJXbnQ0IiwiQm1wNyIsIkFxcDMiLCJBcXA0IiwiQXFwNSIsIkVycmZpMSIsIlJwbDZsIiwiUnBsOS1wczYiLCJScGwxMy1wczMiKSwKICAgIHNsaW0uY29sLmxhYmVsID0gVFJVRSwgZ3JvdXAubGFiZWwucm90ID0gVFJVRSx1c2Uuc2NhbGVkID0gVCxncm91cC5ieT0icmVzLjEuNCIsZ3JvdXAuY2V4ID0gNDAsY2V4LnJvdz0yNSxjZWxscy51c2UgPSBzZXVyYXRfRTE1RTE2UDFQNF93dEBjZWxsLm5hbWVzW3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRyZXMuMS40ICVpbiUgYygzLDEsMjkpXSxncm91cC5vcmRlciA9IGMoMywxLDI5KQogICkKYGBgCmBgYHtyfQpkZl8zXzFfMjlfd3Q8LUZldGNoRGF0YShzZXVyYXRfRTE1RTE2UDFQNF93dCxjKCJUcnA2MyIsIkNsZG42IiwiTm5hdCIsIklkMiIsIklkMyIsIldudDdiIiwiV250NCIsIktydDUiLCJLcnQxNSIsIkFxcDMiLCJBcXA0IiwiQXFwNSIsIlJwbDZsIiwiUnBsOS1wczYiLCJScGwxMy1wczMiLCJhZ2UiLCJyZXMuMS40IikpCmRmXzNfMV8yOV93dDwtZGZfM18xXzI5X3d0W29yZGVyKGZhY3RvcihkZl8zXzFfMjlfd3QkcmVzLjEuNCxsZXZlbHM9YygiMyIsIjEiLCIyOSIpKSxkZl8zXzFfMjlfd3QkYWdlKSxdCmBgYApgYGB7cn0KYWdlPC1zdWJzdHIocm93bmFtZXMoZGZfM18xXzI5X3d0W2RmXzNfMV8yOV93dCRyZXMuMS40ICVpbiUgYygzLDEsMjkpLF0pLDEsMykKCmBgYAoKYGBge3J9CnRhYmxlKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRyZXMuMS40KQoKYGBgCgpgYGB7cn0KbGlicmFyeShncGxvdHMpCmxpYnJhcnkodmlyaWRpcykKaGVhdG1hcC4yKHQoYXMubWF0cml4KGRmXzNfMV8yOV93dFtkZl8zXzFfMjlfd3QkcmVzLjEuNCAlaW4lIGMoMywxLDI5KSwxOjE1XSkpLGNvbD1wbGFzbWEoNTAwKSwgc2NhbGU9InJvdyIsQ29sdiA9IE5BLCBSb3d2ID0gTkEsQ29sU2lkZUNvbG9ycz1jKCIjMDA2ZDJjIiwiIzJjYTI1ZiIsIiM2NmMyYTQiLCIjOTlkOGM5IilbYXMubnVtZXJpYyhhcy5mYWN0b3IoYWdlKSldLGxhYkNvbCA9TkEsZGVuc2l0eS5pbmZvPSJub25lIix0cmFjZT0ibm9uZSIsZGVuZHJvZ3JhbT0nbm9uZScsc3J0Q29sPTQ1LGNleENvbCA9IDEsY29sc2VwPWMoMTAxOCwyMzQyKSxicmVha3M9c2VxKC0zLDMsbGVuZ3RoLm91dD01MDEpKQpwYXIobGVuZCA9IDEpICAgICAgICAgICAjIHNxdWFyZSBsaW5lIGVuZHMgZm9yIHRoZSBjb2xvciBsZWdlbmQKbGVnZW5kKCJsZWZ0IiwgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsZWdlbmQgb24gdGhlIGhlYXRtYXAgcGxvdAogICAgbGVnZW5kID0gYygiRTE1IiwgIkUxNiIsICJQMSIsIlA0IiksICMgY2F0ZWdvcnkgbGFiZWxzCiAgICBjb2wgPSBjKCIjMDA2ZDJjIiwiIzJjYTI1ZiIsIiM2NmMyYTQiLCIjOTlkOGM5IiksICAjIGNvbG9yIGtleQogICAgbHR5PSAxLCAgICAgICAgICAgICAjIGxpbmUgc3R5bGUKICAgIGx3ZCA9IDEwICAgICAgICAgICAgIyBsaW5lIHdpZHRoCikKYGBgCgpgYGB7cn0KbGlicmFyeShncGxvdHMpCmhlYXRtYXAuMih0KGFzLm1hdHJpeChkZl8zXzFfMjlfd3RbZGZfM18xXzI5X3d0JHJlcy4xLjQgJWluJSBjKDMsMSwyOSksMToxNV0pKSxjb2w9Y2l2aWRpcyg1MDApLCBzY2FsZT0icm93IixDb2x2ID0gTkEsIFJvd3YgPSBOQSxDb2xTaWRlQ29sb3JzPWMoIiMwMDZkMmMiLCIjMmNhMjVmIiwiIzY2YzJhNCIsIiM5OWQ4YzkiKVthcy5udW1lcmljKGFzLmZhY3RvcihhZ2UpKV0sbGFiQ29sID1OQSxkZW5zaXR5LmluZm89Im5vbmUiLHRyYWNlPSJub25lIixkZW5kcm9ncmFtPSdub25lJyxzcnRDb2w9NDUsY2V4Q29sID0gMSxjb2xzZXA9YygxMDE4LDIzNDIpLGJyZWFrcz1zZXEoLTMsMyxsZW5ndGgub3V0PTUwMSkpCnBhcihsZW5kID0gMSkgICAgICAgICAgICMgc3F1YXJlIGxpbmUgZW5kcyBmb3IgdGhlIGNvbG9yIGxlZ2VuZApsZWdlbmQoImxlZnQiLCAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxlZ2VuZCBvbiB0aGUgaGVhdG1hcCBwbG90CiAgICBsZWdlbmQgPSBjKCJFMTUiLCAiRTE2IiwgIlAxIiwiUDQiKSwgIyBjYXRlZ29yeSBsYWJlbHMKICAgIGNvbCA9IGMoIiMwMDZkMmMiLCIjMmNhMjVmIiwiIzY2YzJhNCIsIiM5OWQ4YzkiKSwgICMgY29sb3Iga2V5CiAgICBsdHk9IDEsICAgICAgICAgICAgICMgbGluZSBzdHlsZQogICAgbHdkID0gMTAgICAgICAgICAgICAjIGxpbmUgd2lkdGgKKQpgYGAKCmBgYHtyLCBmaWcuaGVpZ2h0PTMsIGZpZy53aWR0aD03fQoKcGRmKGZpbGUgPSBwYXN0ZSgiTWFudXNjcmlwdC9oZWF0bWFwLyIsImJhc2FsX2RldiIsIi5wZGYiLCBzZXAgPSAiIiksIHdpZHRoID0gNywgaGVpZ2h0ID0gMykKaGVhdG1hcC4yKHQoYXMubWF0cml4KGRmXzNfMV8yOV93dFtkZl8zXzFfMjlfd3QkcmVzLjEuNCAlaW4lIGMoMywxLDI5KSwxOjE1XSkpLGNvbD1jaXZpZGlzKDUwMCksIHNjYWxlPSJyb3ciLENvbHYgPSBOQSwgUm93diA9IE5BLENvbFNpZGVDb2xvcnM9YygiIzAwNmQyYyIsIiMyY2EyNWYiLCIjNjZjMmE0IiwiIzk5ZDhjOSIpW2FzLm51bWVyaWMoYXMuZmFjdG9yKGFnZSkpXSxsYWJDb2wgPU5BLGRlbnNpdHkuaW5mbz0ibm9uZSIsdHJhY2U9Im5vbmUiLGRlbmRyb2dyYW09J25vbmUnLHNydENvbD00NSxjZXhDb2wgPSAxLGNvbHNlcD1jKDEwMTgsMjM0MiksYnJlYWtzPXNlcSgtMywzLGxlbmd0aC5vdXQ9NTAxKSkKcGFyKGxlbmQgPSAxKSAgICAgICAgICAgIyBzcXVhcmUgbGluZSBlbmRzIGZvciB0aGUgY29sb3IgbGVnZW5kCmxlZ2VuZCgibGVmdCIsICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGVnZW5kIG9uIHRoZSBoZWF0bWFwIHBsb3QKICAgIGxlZ2VuZCA9IGMoIkUxNSIsICJFMTYiLCAiUDEiLCJQNCIpLCAjIGNhdGVnb3J5IGxhYmVscwogICAgY29sID0gYygiIzAwNmQyYyIsIiMyY2EyNWYiLCIjNjZjMmE0IiwiIzk5ZDhjOSIpLCAgIyBjb2xvciBrZXkKICAgIGx0eT0gMSwgICAgICAgICAgICAgIyBsaW5lIHN0eWxlCiAgICBsd2QgPSAxMCAgICAgICAgICAgICMgbGluZSB3aWR0aAopCmRldi5vZmYoKQoKYGBgCgoKYGBge3IsZmlnLndpZHRoPTMsZmlnLmhlaWdodD00fQpnZ3Bsb3QoZGF0YT1zZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGFbc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJHJlcy4xLjQgJWluJSBjKDMsMSwyOSksXSxhZXMocmVzLjEuNCxmaWxsPWFnZSkpKyAKICAgIGdlb21fYmFyKHBvc2l0aW9uPSJmaWxsIikrIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiMwMDZkMmMiLCIjMmNhMjVmIiwiIzY2YzJhNCIsIiM5OWQ4YzkiKSkrc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHM9YygiMyIsIjEiLCIyOSIpKQpgYGAKCiMjIyMjIGNpbGlhdGVkIGNlbGxzIGFjcm9zcyB0aW1lOgpgYGB7cn0KRTE1RTE2UDFQNF93dF9yZXMxNF8yN292ZXIyMDwtRmluZE1hcmtlcnMoc2V1cmF0X0UxNUUxNlAxUDRfd3QsaWRlbnQuMT1jKDI3KSxpZGVudC4yID0gYygyMCksb25seS5wb3MgPSBUUlVFKQpFMTVFMTZQMVA0X3d0X3JlczE0XzI3b3ZlcjIwCmBgYApgYGB7cn0Kd3JpdGUudGFibGUoRTE1RTE2UDFQNF93dF9yZXMxNF8yN292ZXIyMCwiRTE1RTE2UDFQNF93dF9yZXMxNF8yN292ZXIyMC50eHQiLHNlcD0iXHQiKQoKYGBgCmBgYHtyfQpFMTVFMTZQMVA0X3d0X3JlczE0XzIwb3ZlcjI3PC1GaW5kTWFya2VycyhzZXVyYXRfRTE1RTE2UDFQNF93dCxpZGVudC4xPWMoMjApLGlkZW50LjIgPSBjKDI3KSxvbmx5LnBvcyA9IFRSVUUpCkUxNUUxNlAxUDRfd3RfcmVzMTRfMjBvdmVyMjcKYGBgCmBgYHtyfQp3cml0ZS50YWJsZShFMTVFMTZQMVA0X3d0X3JlczE0XzIwb3ZlcjI3LCJFMTVFMTZQMVA0X3d0X3JlczE0XzIwb3ZlcjI3LnR4dCIsc2VwPSJcdCIpCgpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9MjAsZmlnLndpZHRoPTQwfQoKRG9IZWF0bWFwKG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBnZW5lcy51c2UgPSBjKCJFcGNhbSIsIkNveDZiMiIsIkNrczIiLCJIMmFmeCIsIkNjbmExIiwiQ2NubyIsIlBsazQiLCJDZGMyMGIiLCJDZGMyMCIsIkZveG40IiwiU2hpc2E4IiwiSHlsczEiLCJTbWltMjQiLCJNY2lkYXMiLCJJZnQ4MCIsIlBycjE4IiwiU250biIsIlN0bW5kMSIsIkxkbHJhZDEiLCJDZGhyNCIsIkNkaHIzIiwiU2xjMjNhMiIsIkJhc3AxIiwiRmFtMTY2YiIsIklmaXRtMSIsIkx5NmEiLCJMeTZlIiwiTHk2YzEiLCJBZGFtOCIsIkN4Y2wxNyIsIkFvYzEiLCJSZXRubGEiLCJJdGxuMSIsIkx0ZiIsIlBycjE4IiksIAogICAgc2xpbS5jb2wubGFiZWwgPSBUUlVFLCBncm91cC5sYWJlbC5yb3QgPSBUUlVFLHVzZS5zY2FsZWQgPSBULGdyb3VwLmJ5PSJyZXMuMS40Iixncm91cC5jZXggPSA1MCxjZXgucm93PTQwLGNlbGxzLnVzZSA9IHNldXJhdF9FMTVFMTZQMVA0X3d0QGNlbGwubmFtZXNbc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJHJlcy4xLjQgJWluJSBjKDIwLDI3KV0sZ3JvdXAub3JkZXIgPSBjKDIwLDI3KQogICkKYGBgCgpgYGB7cixmaWcuaGVpZ2h0PTIwLGZpZy53aWR0aD00MH0KdGFibGUoc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJHJlcy4xLjQpCmBgYAoKYGBge3J9CmRmXzIwXzI3X3d0PC1GZXRjaERhdGEoc2V1cmF0X0UxNUUxNlAxUDRfd3QsYygiRm94ajEiLCJMcnJjMjMiLCJDY2RjNjciLCJDZXAxNTIiLCJQbGs0IiwiQ2NuYTEiLCJDY25vIiwiQ2RjMjBiIiwiQ2RjMjAiLCJIeWxzMSIsIk1jaWRhcyIsIlNtaW0yNCIsIklmdDgwIiwiUHJyMTgiLCJTbnRuIiwiU3RtbmQxIiwiTGRscmFkMSIsIkNkaHI0IiwiQ2RocjMiLCJTbGMyM2EyIiwiTHk2YSIsIkx5NmMxIiwiQWRhbTgiLCJDeGNsMTciLCJJZml0bTEiLCJhZ2UiLCJyZXMuMS40IikpCmRmXzIwXzI3X3d0PC1kZl8yMF8yN193dFtvcmRlcihkZl8yMF8yN193dCRyZXMuMS40LGRmXzIwXzI3X3d0JGFnZSksXQpgYGAKYGBge3J9CmFnZTwtc3Vic3RyKHJvd25hbWVzKGRmXzIwXzI3X3d0W2RmXzIwXzI3X3d0JHJlcy4xLjQgJWluJSBjKDIwLDI3KSxdKSwxLDMpCgpgYGAKCgpgYGB7cn0KbGlicmFyeShncGxvdHMpCmhlYXRtYXAuMih0KGFzLm1hdHJpeChkZl8yMF8yN193dFtkZl8yMF8yN193dCRyZXMuMS40ICVpbiUgYygyMCwyNyksMToyNV0pKSxjb2w9cGxhc21hKDUwMCksIHNjYWxlPSJyb3ciLENvbHYgPSBOQSwgUm93diA9IE5BLENvbFNpZGVDb2xvcnM9YygiIzAwNmQyYyIsIiMyY2EyNWYiLCIjNjZjMmE0IiwiIzk5ZDhjOSIpW2FzLm51bWVyaWMoYXMuZmFjdG9yKGFnZSkpXSxsYWJDb2wgPU5BLGRlbnNpdHkuaW5mbz0ibm9uZSIsdHJhY2U9Im5vbmUiLGRlbmRyb2dyYW09J25vbmUnLHNydENvbD00NSxjZXhDb2wgPSAxLGNvbHNlcD1jKDM2MiksYnJlYWtzPXNlcSgtMywzLGxlbmd0aC5vdXQ9NTAxKSkKcGFyKGxlbmQgPSAxKSAgICAgICAgICAgIyBzcXVhcmUgbGluZSBlbmRzIGZvciB0aGUgY29sb3IgbGVnZW5kCmxlZ2VuZCgibGVmdCIsICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGVnZW5kIG9uIHRoZSBoZWF0bWFwIHBsb3QKICAgIGxlZ2VuZCA9IGMoIkUxNSIsICJFMTYiLCAiUDEiLCJQNCIpLCAjIGNhdGVnb3J5IGxhYmVscwogICAgY29sID0gYygiIzAwNmQyYyIsIiMyY2EyNWYiLCIjNjZjMmE0IiwiIzk5ZDhjOSIpLCAgIyBjb2xvciBrZXkKICAgIGx0eT0gMSwgICAgICAgICAgICAgIyBsaW5lIHN0eWxlCiAgICBsd2QgPSAxMCAgICAgICAgICAgICMgbGluZSB3aWR0aAopCmBgYApgYGB7cn0KbGlicmFyeShncGxvdHMpCmhlYXRtYXAuMih0KGFzLm1hdHJpeChkZl8yMF8yN193dFtkZl8yMF8yN193dCRyZXMuMS40ICVpbiUgYygyMCwyNyksMToyMl0pKSxjb2w9Y2l2aWRpcyg1MDApLCBzY2FsZT0icm93IixDb2x2ID0gTkEsIFJvd3YgPSBOQSxDb2xTaWRlQ29sb3JzPWMoIiMwMDZkMmMiLCIjMmNhMjVmIiwiIzY2YzJhNCIsIiM5OWQ4YzkiKVthcy5udW1lcmljKGFzLmZhY3RvcihhZ2UpKV0sbGFiQ29sID1OQSxkZW5zaXR5LmluZm89Im5vbmUiLHRyYWNlPSJub25lIixkZW5kcm9ncmFtPSdub25lJyxzcnRDb2w9NDUsY2V4Q29sID0gMSxjb2xzZXA9YygzNjIpLGJyZWFrcz1zZXEoLTMsMyxsZW5ndGgub3V0PTUwMSkpCnBhcihsZW5kID0gMSkgICAgICAgICAgICMgc3F1YXJlIGxpbmUgZW5kcyBmb3IgdGhlIGNvbG9yIGxlZ2VuZApsZWdlbmQoImxlZnQiLCAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxlZ2VuZCBvbiB0aGUgaGVhdG1hcCBwbG90CiAgICBsZWdlbmQgPSBjKCJFMTUiLCAiRTE2IiwgIlAxIiwiUDQiKSwgIyBjYXRlZ29yeSBsYWJlbHMKICAgIGNvbCA9IGMoIiMwMDZkMmMiLCIjMmNhMjVmIiwiIzY2YzJhNCIsIiM5OWQ4YzkiKSwgICMgY29sb3Iga2V5CiAgICBsdHk9IDEsICAgICAgICAgICAgICMgbGluZSBzdHlsZQogICAgbHdkID0gMTAgICAgICAgICAgICAjIGxpbmUgd2lkdGgKKQpgYGAKCmBgYHtyLGZpZy53aWR0aD0zLGZpZy5oZWlnaHQ9NH0KZ2dwbG90KGRhdGE9c2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhW3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRyZXMuMS40ICVpbiUgYygyMCwyNyksXSxhZXMocmVzLjEuNCxmaWxsPWFnZSkpKyAKICAgIGdlb21fYmFyKHBvc2l0aW9uPSJmaWxsIikrIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpKyAKICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cz1jKCIyMCIsIjI3IikpKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiMwMDZkMmMiLCIjMmNhMjVmIiwiIzY2YzJhNCIsIiM5OWQ4YzkiKSkKYGBgCgpgYGB7cixmaWcud2lkdGg9NSxmaWcuaGVpZ2h0PTV9CnRhYmxlKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRyZXMuMS40W3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRyZXMuMS40ICVpbiUgYygyMCwyNyldLHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRhZ2Vbc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJHJlcy4xLjQgJWluJSBjKDIwLDI3KV0pCmBgYApgYGB7cixmaWcud2lkdGg9NSxmaWcuaGVpZ2h0PTV9CnRfY2lsaWF0ZWQ8LWFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YWJsZShzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkYWdlW3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRyZXMuMS40ICVpbiUgYygyMCwyNyldLHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRyZXMuMS40W3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRyZXMuMS40ICVpbiUgYygyMCwyNyldKSwxKSkKYGBgCmBgYHtyLGZpZy53aWR0aD0zLGZpZy5oZWlnaHQ9Mn0KZ2dwbG90KGRhdGE9dF9jaWxpYXRlZCxhZXMoeD1WYXIxLHk9RnJlcSxncm91cD1WYXIyLGNvbG91cj1WYXIyKSkrZ2VvbV9saW5lKCkrZ2VvbV9wb2ludCgpKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQpgYGAKYGBge3IsZmlnLndpZHRoPTMsZmlnLmhlaWdodD0yfQpnZ3Bsb3QoZGF0YT10X2NpbGlhdGVkLGFlcyh4PXN1YnN0cihWYXIxLDEsMSkseT1GcmVxLGdyb3VwPVZhcjIpKStnZW9tX2xpbmUoYWVzKGNvbG91cj1WYXIyKSxsaW5ldHlwZT0iZG90dGVkIikrZ2VvbV9wb2ludChhZXMoc2hhcGU9VmFyMSkpKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDAuNykpKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKCJzcXVhcmUgb3BlbiIsICJjcm9zcyIsImRpYW1vbmQgb3BlbiIsInBsdXMiKSkgCmBgYAoKIyMjIyMgc2VjcmV0b3J5IGNlbGxzIGFjcm9zcyB0aW1lOgpgYGB7cn0KRTE1RTE2UDFQNF93dF9yZXMxNF8yb3Zlcjc8LUZpbmRNYXJrZXJzKHNldXJhdF9FMTVFMTZQMVA0X3d0LGlkZW50LjE9YygyKSxpZGVudC4yID0gYyg3KSxvbmx5LnBvcyA9IFRSVUUpCkUxNUUxNlAxUDRfd3RfcmVzMTRfMm92ZXI3CmBgYApgYGB7cn0KRTE1RTE2UDFQNF93dF9yZXMxNF83b3ZlcjI8LUZpbmRNYXJrZXJzKHNldXJhdF9FMTVFMTZQMVA0X3d0LGlkZW50LjE9Yyg3KSxpZGVudC4yID0gYygyKSxvbmx5LnBvcyA9IFRSVUUpCkUxNUUxNlAxUDRfd3RfcmVzMTRfN292ZXIyCmBgYAoKYGBge3IsZmlnLmhlaWdodD04LGZpZy53aWR0aD00MH0KCkRvSGVhdG1hcChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZ2VuZXMudXNlID0gYygiU3BkZWYiLCJDcmViM2wxIiwiQ2l0ZWQxIiwiRG5hamI5IiwiS2xrMTAiLCJLbGsxMyIsIktsazExIiwiTXVjNWFjIiwiTXVjNWIiLCJNdWMxIiwiTXVjNCIsIkdwMiIsIlRmZjIiLCJTZnRwZCIsIlNjZ2IxYTEiKSwgCiAgICBzbGltLmNvbC5sYWJlbCA9IFRSVUUsIGdyb3VwLmxhYmVsLnJvdCA9IFRSVUUsdXNlLnNjYWxlZCA9IFQsZ3JvdXAuYnk9InJlcy4xLjQiLGdyb3VwLmNleCA9IDUwLGNleC5yb3c9NDAsY2VsbHMudXNlID0gc2V1cmF0X0UxNUUxNlAxUDRfd3RAY2VsbC5uYW1lc1tzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkcmVzLjEuNCAlaW4lIGMoMiw3KV0KICApCmBgYApgYGB7cn0KZGZfMl83X3d0PC1GZXRjaERhdGEoc2V1cmF0X0UxNUUxNlAxUDRfd3QsYygiU3BkZWYiLCJDcmViM2wxIiwiQ2l0ZWQxIiwiRG5hamI5IiwiS2xrMTAiLCJLbGsxMyIsIktsazExIiwiTXVjNWIiLCJNdWMxIiwiTXVjNCIsIkdwMiIsIlRmZjIiLCJTZnRwZCIsIlNjZ2IxYTEiLCJhZ2UiLCJyZXMuMS40IikpCmRmXzJfN193dDwtZGZfMl83X3d0W29yZGVyKGRmXzJfN193dCRyZXMuMS40LGRmXzJfN193dCRhZ2UpLF0KYGBgCmBgYHtyfQphZ2U8LXN1YnN0cihyb3duYW1lcyhkZl8yXzdfd3RbZGZfMl83X3d0JHJlcy4xLjQgJWluJSBjKDIsNyksXSksMSwzKQoKYGBgCgpgYGB7cn0KdGFibGUoc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJHJlcy4xLjQpCgpgYGAKCmBgYHtyfQpsaWJyYXJ5KGdwbG90cykKaGVhdG1hcC4yKHQoYXMubWF0cml4KGRmXzJfN193dFtkZl8yXzdfd3QkcmVzLjEuNCAlaW4lIGMoMiw3KSwxOjE0XSkpLGNvbD1wbGFzbWEoNTAwKSwgc2NhbGU9InJvdyIsQ29sdiA9IE5BLCBSb3d2ID0gTkEsQ29sU2lkZUNvbG9ycz1jKCIjMmNhMjVmIiwiIzY2YzJhNCIsIiM5OWQ4YzkiKVthcy5udW1lcmljKGFzLmZhY3RvcihhZ2UpKV0sbGFiQ29sID1OQSxkZW5zaXR5LmluZm89Im5vbmUiLHRyYWNlPSJub25lIixkZW5kcm9ncmFtPSdub25lJyxzcnRDb2w9NDUsY2V4Q29sID0gMSxjb2xzZXA9YygxMDk0KSxicmVha3M9c2VxKC0zLDMsbGVuZ3RoLm91dD01MDEpKQpwYXIobGVuZCA9IDEpICAgICAgICAgICAjIHNxdWFyZSBsaW5lIGVuZHMgZm9yIHRoZSBjb2xvciBsZWdlbmQKbGVnZW5kKCJsZWZ0IiwgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsZWdlbmQgb24gdGhlIGhlYXRtYXAgcGxvdAogICAgbGVnZW5kID0gYyggIkUxNiIsICJQMSIsIlA0IiksICMgY2F0ZWdvcnkgbGFiZWxzCiAgICBjb2wgPSBjKCIjMmNhMjVmIiwiIzY2YzJhNCIsIiM5OWQ4YzkiKSwgICMgY29sb3Iga2V5CiAgICBsdHk9IDEsICAgICAgICAgICAgICMgbGluZSBzdHlsZQogICAgbHdkID0gMTAgICAgICAgICAgICAjIGxpbmUgd2lkdGgKKQpgYGAKYGBge3J9CmxpYnJhcnkoZ3Bsb3RzKQpoZWF0bWFwLjIodChhcy5tYXRyaXgoZGZfMl83X3d0W2RmXzJfN193dCRyZXMuMS40ICVpbiUgYygyLDcpLDE6MTRdKSksY29sPWNpdmlkaXMoNTAwKSwgc2NhbGU9InJvdyIsQ29sdiA9IE5BLCBSb3d2ID0gTkEsQ29sU2lkZUNvbG9ycz1jKCIjMmNhMjVmIiwiIzY2YzJhNCIsIiM5OWQ4YzkiKVthcy5udW1lcmljKGFzLmZhY3RvcihhZ2UpKV0sbGFiQ29sID1OQSxkZW5zaXR5LmluZm89Im5vbmUiLHRyYWNlPSJub25lIixkZW5kcm9ncmFtPSdub25lJyxzcnRDb2w9NDUsY2V4Q29sID0gMSxjb2xzZXA9YygxMDk0KSxicmVha3M9c2VxKC0zLDMsbGVuZ3RoLm91dD01MDEpKQpwYXIobGVuZCA9IDEpICAgICAgICAgICAjIHNxdWFyZSBsaW5lIGVuZHMgZm9yIHRoZSBjb2xvciBsZWdlbmQKbGVnZW5kKCJsZWZ0IiwgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsZWdlbmQgb24gdGhlIGhlYXRtYXAgcGxvdAogICAgbGVnZW5kID0gYyggIkUxNiIsICJQMSIsIlA0IiksICMgY2F0ZWdvcnkgbGFiZWxzCiAgICBjb2wgPSBjKCIjMmNhMjVmIiwiIzY2YzJhNCIsIiM5OWQ4YzkiKSwgICMgY29sb3Iga2V5CiAgICBsdHk9IDEsICAgICAgICAgICAgICMgbGluZSBzdHlsZQogICAgbHdkID0gMTAgICAgICAgICAgICAjIGxpbmUgd2lkdGgKKQpgYGAKCmBgYHtyLGZpZy53aWR0aD0zLGZpZy5oZWlnaHQ9NH0KZ2dwbG90KGRhdGE9c2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhW3NldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRyZXMuMS40ICVpbiUgYygyLDcpLF0sYWVzKHJlcy4xLjQsZmlsbD1hZ2UpKSsgCiAgICBnZW9tX2Jhcihwb3NpdGlvbj0iZmlsbCIpKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKSsgCiAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHM9YygiMiIsIjciKSkrCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzJjYTI1ZiIsIiM2NmMyYTQiLCIjOTlkOGM5IikpCmBgYAoKCmBgYHtyLGZpZy5oZWlnaHQ9OCxmaWcud2lkdGg9OH0Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJyZXMuMS40IikKClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJGb3hqMSIsIk1jaWRhcyIsIkNkaHIzIiwiQ3JlYjNsMSIsIlNwZGVmIiwiR3AyIiksIG5Db2wgPSAzLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjEsdXNlLnJhdz1GLGdyb3VwLmJ5PSJzcGVjaWZpY190eXBlIixpZGVudC5pbmNsdWRlID1jKDIsNywyMCwyNywyOCkgKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygnI0VDOTA2QicsICcjOEU5RkM1JywgJyNBRkQ0NjcnCikpCgpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9NCxmaWcud2lkdGg9M30Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJyZXMuMS40IikKClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJGb3hqMSIpLCBuQ29sID0gMyx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4xLHVzZS5yYXc9Rixncm91cC5ieT0ic3BlY2lmaWNfdHlwZSIsaWRlbnQuaW5jbHVkZSA9YygyLDcsMjAsMjcsMjgpICkrc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoJyNFQzkwNkInLCAnIzhFOUZDNScsICcjQUZENDY3JwopKQoKYGBgCmBgYHtyLGZpZy5oZWlnaHQ9NCxmaWcud2lkdGg9M30Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJyZXMuMS40IikKClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJNY2lkYXMiKSwgbkNvbCA9IDMseC5sYWIucm90ID0gVCxwb2ludC5zaXplLnVzZSA9IDAuMSx1c2UucmF3PUYsZ3JvdXAuYnk9InNwZWNpZmljX3R5cGUiLGlkZW50LmluY2x1ZGUgPWMoMiw3LDIwLDI3LDI4KSApK3NjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCcjRUM5MDZCJywgJyM4RTlGQzUnLCAnI0FGRDQ2NycKKSkKCmBgYAoKYGBge3IsZmlnLmhlaWdodD00LGZpZy53aWR0aD0zfQpzZXVyYXRfRTE1RTE2UDFQNF93dDwtU2V0QWxsSWRlbnQob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGlkID0gInJlcy4xLjQiKQoKVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoIkNkaHIzIiksIG5Db2wgPSAzLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjEsdXNlLnJhdz1GLGdyb3VwLmJ5PSJzcGVjaWZpY190eXBlIixpZGVudC5pbmNsdWRlID1jKDIsNywyMCwyNywyOCkgKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygnI0VDOTA2QicsICcjOEU5RkM1JywgJyNBRkQ0NjcnCikpCgpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9NCxmaWcud2lkdGg9M30Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJyZXMuMS40IikKClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJDcmViM2wxIiksIG5Db2wgPSAzLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjEsdXNlLnJhdz1GLGdyb3VwLmJ5PSJzcGVjaWZpY190eXBlIixpZGVudC5pbmNsdWRlID1jKDIsNywyMCwyNywyOCkgKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygnI0VDOTA2QicsICcjOEU5RkM1JywgJyNBRkQ0NjcnCikpCgpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9NCxmaWcud2lkdGg9M30Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJyZXMuMS40IikKClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJTcGRlZiIpLCBuQ29sID0gMyx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4xLHVzZS5yYXc9Rixncm91cC5ieT0ic3BlY2lmaWNfdHlwZSIsaWRlbnQuaW5jbHVkZSA9YygyLDcsMjAsMjcsMjgpICkrc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoJyNFQzkwNkInLCAnIzhFOUZDNScsICcjQUZENDY3JwopKQoKYGBgCgpgYGB7cixmaWcuaGVpZ2h0PTQsZmlnLndpZHRoPTN9CnNldXJhdF9FMTVFMTZQMVA0X3d0PC1TZXRBbGxJZGVudChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgaWQgPSAicmVzLjEuNCIpCgpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygiR3AyIiksIG5Db2wgPSAzLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjEsdXNlLnJhdz1GLGdyb3VwLmJ5PSJzcGVjaWZpY190eXBlIixpZGVudC5pbmNsdWRlID1jKDIsNywyMCwyNywyOCkgKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygnI0VDOTA2QicsICcjOEU5RkM1JywgJyNBRkQ0NjcnCikpCgpgYGAKCmBgYHtyLGZpZy5oZWlnaHQ9NCxmaWcud2lkdGg9M30Kc2V1cmF0X0UxNUUxNlAxUDRfd3Q8LVNldEFsbElkZW50KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBpZCA9ICJyZXMuMS40IikKClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJQcnIxOCIpLCBuQ29sID0gMyx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4xLHVzZS5yYXc9Rixncm91cC5ieT0ic3BlY2lmaWNfdHlwZSIsaWRlbnQuaW5jbHVkZSA9YygyLDcsMjAsMjcsMjgpICkrc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoJyNFQzkwNkInLCAnIzhFOUZDNScsICcjQUZENDY3JwopKQoKYGBgCgpgYGB7cixmaWcuaGVpZ2h0PTQsZmlnLndpZHRoPTN9ClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJkb3VibGV0X3Njb3JlIiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjEsdXNlLnJhdz1GLGdyb3VwLmJ5PSJzcGVjaWZpY190eXBlIixpZGVudC5pbmNsdWRlID1jKDIsNywyMCwyNywyOCkgKQoKYGBgCiMjIyMjIGltbXVuZSByZXNwb25zZToKIyMjIyMgVG9sbCBsaWtlIHJlY2VwdG9ycyBhbmQgc2lnbmFsaW5nOgpgYGB7cixmaWcuaGVpZ2h0PTQwLGZpZy53aWR0aD0yNX0KVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoIlRscjEiLCJUbHIyIiwiVGxyMyIsIlRscjQiLCJUbHI1IiwiVGxyNiIsIlRscjciLCJUbHI4IiwiVGxyOSIsIlRscjExIiwiVGxyMTIiLCJUbHIxMyIsIk15ZDg4IiwiVGljYW0xIiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjMsdXNlLnJhdz1GLGdyb3VwLmJ5PSJyZXMuMS40IikKCmBgYAoKIyMjIyNDTFJzIChDLXR5cGUgbGVjdGluIGRvbWFpbik6IApgYGB7cixmaWcuaGVpZ2h0PTEwLGZpZy53aWR0aD0yNX0KVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoIlJlZzNhIiwiUmVnM2IiLCJSZWczZyIsIkNsZWM0biIpLCBuQ29sID0gMSx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4zLHVzZS5yYXc9Rixncm91cC5ieT0icmVzLjEuNCIpCgpgYGAKIyMjIyMgTkxSOgpgYGB7cixmaWcuaGVpZ2h0PTYsZmlnLndpZHRoPTI1fQpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygiTm9kMSIsIk5vZDIiLCJObHJwNiIpLCBuQ29sID0gMSx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4zLHVzZS5yYXc9Rixncm91cC5ieT0icmVzLjEuNCIpCgpgYGAKIyMjIyMgUkxSOgpgYGB7cixmaWcuaGVpZ2h0PTYsZmlnLndpZHRoPTI1fQpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygiRGR4NTgiLCJJZmloMSIsIkRoeDU4IiksIG5Db2wgPSAxLHgubGFiLnJvdCA9IFQscG9pbnQuc2l6ZS51c2UgPSAwLjMsdXNlLnJhdz1GLGdyb3VwLmJ5PSJyZXMuMS40IikKCmBgYAoKCmBgYHtyLGZpZy5oZWlnaHQ9MjAsZmlnLndpZHRoPTI1fQpWbG5QbG90KG9iamVjdCA9IHNldXJhdF9FMTVFMTZQMVA0X3d0LCBmZWF0dXJlcy5wbG90ID0gYygiQ2QxNzciLCJQdGdkciIsIkYycmwxIiwiVHNscCIsIklsMzMiLCJJbDI1IiwiQWdlciIpLCBuQ29sID0gMSx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4zLHVzZS5yYXc9Rixncm91cC5ieT0icmVzLjEuNCIpCgpgYGAKYGBge3IsZmlnLmhlaWdodD0xOCxmaWcud2lkdGg9MjV9ClZsblBsb3Qob2JqZWN0ID0gc2V1cmF0X0UxNUUxNlAxUDRfd3QsIGZlYXR1cmVzLnBsb3QgPSBjKCJEZWZiMSIsIkx5ejEiLCJMeXoyIiwiTHRmIiwiQ2FtcCIsIlNmdHBhMSIsIlNmdHBkIiwiU2xwaSIpLCBuQ29sID0gMSx4LmxhYi5yb3QgPSBULHBvaW50LnNpemUudXNlID0gMC4zLHVzZS5yYXc9Rixncm91cC5ieT0icmVzLjEuNCIpCgpgYGAKCgoKYGBge3J9CmRmX2FsbF93dDwtRmV0Y2hEYXRhKHNldXJhdF9FMTVFMTZQMVA0X3d0LGMoIkxicCIsIkNkMTQiLCJUbHI0IiwiVGxyMiIsIk15ZDg4IiwiVGljYW0xIiwiSXRsbjEiLCJSZWczZyIsIkxnYWxzMyIsIk5vZDEiLCJOb2QyIiwiTmxycDYiLCJEZHg1OCIsIklmaWgxIiwiRGh4NTgiLCJTdWNucjEiLCJyZXMuMS40IiwiYWdlIiwic2VxX2dyb3VwIiwic3BlY2lmaWNfdHlwZSIsIkZveGoxIiwiU3BkZWYiLCJGb3hhMyIsIkNyZWIzbDEiLCJHcDIiLCJUZmYyIiwiU2NnYjFhMSIsIkNmdHIiLCJGb3hpMSIsIkdqYTEiLCJNdWMxIiwiTXVjNCIsIk11YzE2IiwiTXVjMjAiLCJNdWM1YiIsIk11YzVhYyIsIk11YzIiLCJEZWZiMSIsIkx5ejIiLCJMdGYiLCJTZnRwYTEiLCJTZnRwZCIsIlNmdHBiIiwiU2xwaSIsIkxjbjIiLCJQaWdyIiwiQ2hpbDQiLCJDY2w1IiwiQ3hjbDEwIiwiQ3hjbDIiLCJDeGNsMSIsIlBmNCIsIkN4Y2wxMiIsIkN4Y2wxNCIsIkN4Y2wxNSIsIkN4Y2wxNiIsIkN4Y2wxNyIsIkNjbDIiLCJDY2w3IiwiQ2NsMTciLCJDY2wyMCIsIkNjbDIxYSIsIkNjbDI1IiwiQ2NsMjdhIiwiQ2NsMjgiLCJDeDNjbDEiLCJJbDEwIiwiVG5mIiwiUzEwMGE4IiwiUzEwMGE5IiwiSWw2IiwiSWwxOCIsIklsMWIiLCJJbDFybDEiLCJDY2wxMSIsIkNjbDI0IiwiSWwzMyIsIklsMjUiLCJUc2xwIiwiRjJybDEiLCJSZXRubGEiLCJBbG94MTUiLCJBbG94NSIsIkdhdGEyIiwiVGdmYjIiLCJUZ2ZiMSIsIk9ybWRsMyIsIlB0Z2VzIiwiUHRnZHMiLCJQdGdzMiIsIkhwZ2RzIiwiVGJ4YXMxIiwiQXJlZyIsIklsMiIsIklsMTdiIiwiSWwxN2QiLCJJbDM0IiwiSWwxMSIsIklsMTUiLCJJZm5rIiwiSWZubHIxIiwiTmZrYml6IiwiTmZrYmlhIikpCgpgYGAKYGBge3J9CnRhYmxlKGNvbG5hbWVzKGRmX2FsbF93dCkpCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9MywgZmlnLndpZHRoPTd9CiNmb3IgKGkgaW4gYygiTGJwIiwiQ2QxNCIsIlRscjQiLCJUbHIyIiwiTXlkODgiLCJUaWNhbTEiLCJJdGxuMSIsIlJlZzNnIiwiTGdhbHMzIiwiTm9kMSIsIk5vZDIiLCJObHJwNiIsIkRkeDU4IiwiSWZpaDEiLCJEaHg1OCIsIlN1Y25yMSIpKQojewojcGRmKGZpbGUgPSBwYXN0ZSgiTWFudXNjcmlwdC9NaWNyb2JpYWxTZW5zaW5nLyIsaSwiLnBkZiIsIHNlcCA9ICIiKSwgd2lkdGggPSA3LCBoZWlnaHQgPSAzKQojcHJpbnQoZ2dwbG90KGRmX2FsbF93dFsoZGZfYWxsX3d0JHNwZWNpZmljX3R5cGUgJWluJSAjYygiQmFzYWwiLCJTZWNyZXRvcnkiLCJDaWxpYXRlZCIsIlRyYW5zaXRpb25hbCIsIkNpbGlhU2VjcmV0b3J5IiwiQ3ljbGluZ0VwaXRoZWxpYWwiKSksXSxhZXNfc3RyaW5nKHg9ImFnZSIseT1pKSkrZmFjZXRfZ3JpZCgufnNwZWNpZmljX3R5cGUpK2dlb21fZG90cGxvdChiaW5heGlzPSJ5IixhZXMoZmlsbD1hZ2UpLGJpbndpZHRoPTAuIzAxLHN0YWNrZGlyPSJjZW50ZXIiLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKDAuOCksIGRvdHNpemU9MC44KSsgc3RhdF9zdW1tYXJ5KGFlcyhjb2xvcj1hZ2UpLGZ1bi5kYXRhPW1lYW5fc2RsLCBmdW4uYXJncyA9IGxpc3QobXVsdD0xKSwgCiMgICAgICAgICAgICAgICAgIGdlb209InBvaW50cmFuZ2UiLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKDAuNykpKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LGhqdXN0PTEpKSkKI2Rldi5vZmYoKQojfQpgYGAKCiMjIyMjIFNvbWUgY2F0ZWdvcmllcyBvZiBnZW5lczoKIyMjIyMgbGlwaWQgc3ludGhldGljIGVuenltZXMgb3IgaW5oaWJpdG9yczogIk9ybWRsMyIsIlB0Z2VzIiwiUHRnZHMiLCJQdGdzMiIsIkhwZ2RzIiwiSHBnZHMiLCJQdGdyMiIsIlRieGFzMSIsIkFsb3g1IiwiUHRnZHIiCiMjIyMjIGtub3duIFRoMiBpbmR1Y2VycywgZWZmZWN0b3JzLCBhbmQgbWVkaWF0b3JzOiJJbDEwIiwiVG5mIiwiUzEwMGE4IiwiUzEwMGE5IiwiSWw2IiwiSWwxOCIsIklsMWIiLCJJbDFybDEiLCJDY2wxMSIsIkNjbDI0IiwiSWwzMyIsIklsMjUiLCJUc2xwIiwiRjJybDEiLCJSZXRubGEiLCJBbG94MTUiLCJBbG94NSIsIkdhdGEyIiwiVGdmYjIiLCJUZ2ZiMSIsIk9ybWRsMyIsIlB0Z2VzIiwiUHRnZHMiLCJQdGdzMiIsIkhwZ2RzIiwiVGJ4YXMxIiwiQXJlZyIKIyMjIyMgY2hlbW9raW5lczogUGJwYiBub3QgZXhwcmVzc2VkLCBDY2wyMWMsIENjbDIxYy4xLCBDeGNsMTEgbm90IGZvdW5kIGluIG1tMTAuMS4yLjAuICJDeGNsMyIsIkN4Y2wyIiwiQ3hjbDEiLCJQZjQiLCJDeGNsNSIsIkN4Y2w5IiwiQ3hjbDEwIiwiQ3hjbDEyIiwiQ3hjbDEzIiwiQ3hjbDE0IiwiQ3hjbDE1IiwiQ3hjbDE2IiwiQ3hjbDE3IiwiQ2NsMSIsIkNjbDIiLCJDY2wzIiwiQ2NsNCIsIkNjbDUiLCJDY2w3IiwiQ2NsOCIsIkNjbDExIiwiQ2NsMTIiLCJDY2w5IiwiQ2NsMTciLCJDY2wxOSIsIkNjbDIwIiwiQ2NsMjFhIiwiQ2NsMjFiLjEiLCJDY2wyMiIsIkNjbDYiLCJDY2wyNCIsIkNjbDI1IiwiQ2NsMjdhIiwiQ2NsMjdiIiwiQ2NsMjgiLCJYY2wxIiwiQ3gzY2wxIgojIyMjIyBleHByZXNzZWQgY2hlbW9raW5lczogIkNjbDUiLCJDeGNsMTAiLCJDeGNsMiIsIkN4Y2wxIiwiUGY0IiwiQ3hjbDEyIiwiQ3hjbDE0IiwiQ3hjbDE1IiwiQ3hjbDE2IiwiQ3hjbDE3IiwiQ2NsMiIsIkNjbDciLCJDY2wxNyIsIkNjbDIwIiwiQ2NsMjFhIiwiQ2NsMjUiLCJDY2wyN2EiLCJDY2wyOCIsIkN4M2NsMSIKIyMjIyMgSW50ZXJsZXVraW5zIChJbDMsSWw5LElsMjAsSWwzMSBub3QgZXhwcmVzc2VkKToiSWwxMCIsIklsMTEiLCJJbDEyYSIsIklsMTJiIiwiSWwxMyIsIklsMTUiLCJJbDE2IiwiSWwxN2EiLCJJbDE3YiIsIklsMTdjIiwiSWwxN2QiLCJJbDE3ZiIsIklsMTgiLCJJbDE5IiwiSWwyIiwiSWwyMSIsIklsMjIiLCJJbDI0IiwiSWwyNSIsIklsMjciLCJJbDMzIiwiSWwzNCIsIklsNCIsIklsNSIsIklsNiIsIklsNyIsIklsMWEiLCJJbDFiIgojIyMjIyBBbnRpbWljcm9iaWFsIGVmZmVjdG9yczogIk11YzEiLCJNdWM0IiwiTXVjMTYiLCJNdWMyMCIsIk11YzViIiwiTXVjNWFjIiwiTXVjMiIsIkRlZmIxIiwiTHl6MiIsIkx0ZiIsIlNmdHBhMSIsIlNmdHBkIiwiU2Z0cGIiLCJTbHBpIiwiTGNuMiIsIlBpZ3IiLCJDaGlsNCIKIyMjIyMga25vd24gZXBpdGhlbGlhbCBjeXRva2luZXMgYW5kIG1lZGlhdG9yczogIklsMWEiLCJJbDI1IiwiSWwzMyIsIlRzbHAiLCJDc2YyIiwiQ2NsNSIsIkN4Y2wxMCIKIyMjIyMgTW9zdCBpbnRlcmZlcm9ucyBjYW5ub3QgYmUgZm91bmQgaW4gb3VyIGRhdGFzZXQ6CgpgYGB7cixmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD0xNX0KVmxuUGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgZmVhdHVyZXMucGxvdCA9IGMoIklmbmsiLCJJZm5scjEiKSxncm91cC5ieT0iYWdlIiwgbGVnZW5kLnBvc2l0aW9uID0gImxlZnQiKQpgYGAKYGBge3J9CnNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSR0eXBlX2FnZTwtYXMuZmFjdG9yKHBhc3RlKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRjZWxsX3R5cGUsc2V1cmF0X0UxNUUxNlAxUDRfd3RAbWV0YS5kYXRhJGFnZSxzZXA9Il8iKSkKYGBgCmBgYHtyfQpzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkc3BlY2lmaWNUeXBlX2FnZTwtYXMuZmFjdG9yKHBhc3RlKHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRzcGVjaWZpY190eXBlLHNldXJhdF9FMTVFMTZQMVA0X3d0QG1ldGEuZGF0YSRhZ2Usc2VwPSJfIikpCmBgYAoKCmBgYHtyLGZpZy5oZWlnaHQ9NixmaWcud2lkdGg9MTJ9CnNldXJhdF9FMTVFMTZQMVA0X3d0PC1TZXRBbGxJZGVudChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgaWQgPSAic3BlY2lmaWNfdHlwZSIpCgpzZXVyYXRfRTE1RTE2UDFQNF93dEBpZGVudCA9IGZhY3RvcihzZXVyYXRfRTE1RTE2UDFQNF93dEBpZGVudCxsZXZlbHMoc2V1cmF0X0UxNUUxNlAxUDRfd3RAaWRlbnQpW2MoNSwxLDE5LDE3LDQsMywxNCwxNiwyMCwxMSw5LDEwLDEzLDIxLDEyLDIsOCw2LDE4LDE1LDcpXSkKRG90UGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgY29scy51c2UgPSBjKCJmb3Jlc3RncmVlbiIsIm1hZ2VudGEzIiksZ2VuZXMucGxvdCA9IGMoIkNjbDIwIiwiUHRnZHMiLCJQdGdlcyIsIlB0Z3MyIiwiQ3hjbDE1IiwiQ3hjbDE3IiwiQ2NsMjgiLCJSZXRubGEiLCJOZmtiaWEiLCJOZmtiaXoiLCJGMnJsMSIsIkFyZWciLCJEZWZiMSIsIlNmdHBkIiwiU2Z0cGIiLCJTZnRwYTEiLCJNdWMxIiwiTXVjNCIsIk11YzE2IiwiTXVjMjAiLCJNdWM1YiIsIk11YzVhYyIsIk11YzIiLCJMeXoyIiwiTHRmIiwiU2xwaSIsIkxjbjIiLCJQaWdyIiwiQ2hpbDQiLCJJdGxuMSIsIkxicCIsIkxnYWxzMyIsIlJlZzNnIiksZ3JvdXAuYnkgPSAiaWRlbnQiLCB4LmxhYi5yb3QgPSBULHBsb3QubGVnZW5kID0gVCxjb2wubWluID0gLTIsY29sLm1heCA9IDIpCmBgYAoKYGBge3J9CnByaW50KGxldmVscyhzZXVyYXRfRTE1RTE2UDFQNF93dEBpZGVudCkpCmBgYAoKYGBge3IsZmlnLmhlaWdodD0xMCxmaWcud2lkdGg9MTB9CnNldXJhdF9FMTVFMTZQMVA0X3d0PC1TZXRBbGxJZGVudChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgaWQgPSAic3BlY2lmaWNUeXBlX2FnZSIpCnNldXJhdF9FMTVFMTZQMVA0X3d0QGlkZW50PWZhY3RvcihzZXVyYXRfRTE1RTE2UDFQNF93dEBpZGVudCxsZXZlbHMoc2V1cmF0X0UxNUUxNlAxUDRfd3RAaWRlbnQpW2MoMTY6MTksMTo0LDY2LDU5OjYxLDEyOjE1LDk6MTEsMzA6MzcpXSkKRG90UGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgY29scy51c2UgPSBjKCJncmF5IiwiZm9yZXN0Z3JlZW4iKSxnZW5lcy5wbG90ID0gcmV2KGMoIkNjbDIwIiwiUHRnZHMiLCJQdGdlcyIsIlB0Z3MyIiwiQ3hjbDE1IiwiQ3hjbDE3IiwiQ2NsMjgiLCJSZXRubGEiLCJOZmtiaWEiLCJOZmtiaXoiLCJGMnJsMSIsIkFyZWciLCJEZWZiMSIsIlNmdHBkIiwiU2Z0cGIiLCJTZnRwYTEiLCJNdWMxIiwiTXVjNCIsIk11YzE2IiwiTXVjMjAiLCJNdWM1YiIsIk11YzVhYyIsIk11YzIiLCJMeXoyIiwiTHRmIiwiU2xwaSIsIkxjbjIiLCJQaWdyIiwiQ2hpbDQiLCJJdGxuMSIsIkxicCIsIkxnYWxzMyIsIlJlZzNnIikpLGdyb3VwLmJ5ID0gImlkZW50IiwgeC5sYWIucm90ID0gVCxwbG90LmxlZ2VuZCA9IFQsZG8ucmV0dXJuID0gVCkrcm90YXRlKCkrIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIHZqdXN0ID0gMSxoanVzdD0xKSkgI3RoaXMgc2NhbGVzIGJvdGggZ2Vub3R5cGVzIHRvZ2V0aGVyCmBgYAoKYGBge3IsZmlnLmhlaWdodD0xMCxmaWcud2lkdGg9MTB9CnNldXJhdF9FMTVFMTZQMVA0X3d0PC1TZXRBbGxJZGVudChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgaWQgPSAic3BlY2lmaWNUeXBlX2FnZSIpCnNldXJhdF9FMTVFMTZQMVA0X3d0QGlkZW50PWZhY3RvcihzZXVyYXRfRTE1RTE2UDFQNF93dEBpZGVudCxsZXZlbHMoc2V1cmF0X0UxNUUxNlAxUDRfd3RAaWRlbnQpW2MoMTY6MTksMTo0LDY2LDU5OjYxLDEyOjE1LDk6MTEsMzA6MzcpXSkKRG90UGxvdChvYmplY3QgPSBzZXVyYXRfRTE1RTE2UDFQNF93dCwgY29scy51c2UgPSBjKCJmb3Jlc3RncmVlbiIsIm1hZ2VudGEzIiksZ2VuZXMucGxvdCA9IHJldihjKCJDY2wyMCIsIlB0Z2RzIiwiUHRnZXMiLCJQdGdzMiIsIkN4Y2wxNSIsIkN4Y2wxNyIsIkNjbDI4IiwiUmV0bmxhIiwiTmZrYmlhIiwiTmZrYml6IiwiRjJybDEiLCJBcmVnIiwiRGVmYjEiLCJTZnRwZCIsIlNmdHBiIiwiU2Z0cGExIiwiTXVjMSIsIk11YzQiLCJNdWMxNiIsIk11YzIwIiwiTXVjNWIiLCJNdWM1YWMiLCJNdWMyIiwiTHl6MiIsIkx0ZiIsIlNscGkiLCJMY24yIiwiUGlnciIsIkNoaWw0IiwiSXRsbjEiLCJMYnAiLCJMZ2FsczMiLCJSZWczZyIpKSxncm91cC5ieSA9ICJpZGVudCIsIHgubGFiLnJvdCA9IFQscGxvdC5sZWdlbmQgPSBULGRvLnJldHVybiA9IFQsY29sLm1pbiA9IC0yLGNvbC5tYXggPSAyKStyb3RhdGUoKSsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgdmp1c3QgPSAxLGhqdXN0PTEpKSAjdGhpcyBzY2FsZXMgYm90aCBnZW5vdHlwZXMgdG9nZXRoZXIKYGBgCgojIyMjIyBNdWNvc2FsIGNoZW1va2luZXMgKGNjbDI1LCBjY2wyOCwgY3hjbDE0LCBhbmQgY3hjbDE3KToKYGBge3IsIGZpZy5oZWlnaHQ9MywgZmlnLndpZHRoPTh9CmxpYnJhcnkoZ2dwdWJyKQoKZ2dwbG90KGRmX2FsbF93dFsoZGZfYWxsX3d0JHNwZWNpZmljX3R5cGUgJWluJSBjKCJCYXNhbCIsIlRyYW5zaXRpb25hbCIsIkNpbGlhdGVkIiwiU2VjcmV0b3J5IiwiQ2lsaWFTZWNyZXRvcnkiLCJDeWNsaW5nRXBpdGhlbGlhbCIpKSxdLGFlcyhhZ2UsQ3hjbDE3KSkrZmFjZXRfZ3JpZCgufnNwZWNpZmljX3R5cGUpK2dlb21fZG90cGxvdChiaW5heGlzPSJ5IixhZXMoZmlsbD1hZ2UpLGJpbndpZHRoPTAuMDUsc3RhY2tkaXI9ImNlbnRlciIscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoMC44KSwgZG90c2l6ZT0wLjIpKyBzdGF0X3N1bW1hcnkoYWVzKGNvbG9yPWFnZSksZnVuLmRhdGE9bWVhbl9zZGwsIGZ1bi5hcmdzID0gbGlzdChtdWx0PTEpLCAKICAgICAgICAgICAgICAgICBnZW9tPSJwb2ludHJhbmdlIixwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgwLjcpKSsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSxoanVzdD0xKSkKYGBgCgoKIyMjIyMgVG8gbG9vayBpbnRvIGdlbmVzIGNvcnJlbGF0ZWQgd2l0aCBzY0dQUyBzY29yZXM6CmBgYHtyfQpDaWxpb3BhdGh5X2Nvcl90ZXN0PC1hcHBseSh3dF9jaWxpb3BhdGh5X3RhYmxlLCAyLCBmdW5jdGlvbih4KSBjb3IudGVzdChzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkY2lsaW9wYXRoeV9zY29yZSx4LG1ldGhvZD0icGVhcnNvbiIpKSAKYGBgCmBgYHtyfQpkZl9DaWxpb3BhdGh5X2Nvcl90ZXN0PC1hcy5kYXRhLmZyYW1lKGRvLmNhbGwocmJpbmQsIENpbGlvcGF0aHlfY29yX3Rlc3QpKQoKYGBgCmBgYHtyfQpkZl9vcmRlcl9DaWxpb3BhdGh5X2Nvcl90ZXN0PC1kZl9DaWxpb3BhdGh5X2Nvcl90ZXN0W29yZGVyKHVubGlzdChkZl9DaWxpb3BhdGh5X2Nvcl90ZXN0JGVzdGltYXRlKSxkZWNyZWFzaW5nID0gVFJVRSksXQpgYGAKYGBge3J9CnRpZHlfQ2lsaW9wYXRoeV9jb3I8LWNiaW5kKGRmX29yZGVyX0NpbGlvcGF0aHlfY29yX3Rlc3QkZXN0aW1hdGUsZGZfb3JkZXJfQ2lsaW9wYXRoeV9jb3JfdGVzdCRwLnZhbHVlKQpgYGAKCmBgYHtyfQpjb2xuYW1lcyh0aWR5X0NpbGlvcGF0aHlfY29yKTwtYygiY29yIiwicC52YWx1ZSIpCmBgYAoKYGBge3J9CnRpZHlfQ2lsaW9wYXRoeV9jb3IKYGBgCmBgYHtyfQp1bmxpc3QodGlkeV9DaWxpb3BhdGh5X2NvclssMV0pCgpgYGAKCmBgYHtyfQoKI3ZvbGNfQ2lsaW9wYXRoeV9jb3I8LW11dGF0ZSh0aWR5X0NpbGlvcGF0aHlfY29yLHNpZz1pZmVsc2UodGlkeV9DaWxpb3BhdGh5X2NvciRwLnZhbHVlPDAuMDEsIlBfYWRqPDAuMDEiLCJOb3QgU2lnIikpCmRmX3RpZHlfY2lsaW9wYXRoeV9jb3I8LWRhdGEuZnJhbWUobWF0cml4KHVubGlzdCh0aWR5X0NpbGlvcGF0aHlfY29yKSwgbnJvdz0xMTIsIGJ5cm93PUYpLHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpCmNvbG5hbWVzKGRmX3RpZHlfY2lsaW9wYXRoeV9jb3IpPC1jKCJjb3IiLCJwLnZhbHVlIikKZGZfdGlkeV9jaWxpb3BhdGh5X2NvciRnZW5lPC1yb3duYW1lcyh0aWR5X0NpbGlvcGF0aHlfY29yKQpgYGAKYGBge3J9CmxpYnJhcnkoZ2dyZXBlbCkKZ2dwbG90KGRmX3RpZHlfY2lsaW9wYXRoeV9jb3IsIGFlcyhjb3IsIHAudmFsdWUpKStnZW9tX3BvaW50KCkgK2dlb21fdGV4dF9yZXBlbChkYXRhPWZpbHRlcihkZl90aWR5X2NpbGlvcGF0aHlfY29yLGNvcj4wLjQ1KSwgYWVzKGxhYmVsPWdlbmUpKSt5bGltKC0yZS0wNSwyLjVlLTA1KQpwCnArZ2VvbV90ZXh0X3JlcGVsKGRhdGE9ZmlsdGVyKGFzLmRhdGEuZnJhbWUodGlkeV9DaWxpb3BhdGh5X2NvciksIHBfdmFsX2FkajwwLjA1KSwgYWVzKGxhYmVsPXJvd25hbWVzKHRpZHlfQ2lsaW9wYXRoeV9jb3IpKSkKYGBgCmBgYHtyfQp3dF9jaWxpb3BhdGh5X2NsdXN0ZXI8LWRhdGEuZnJhbWUod3RfY2lsaW9wYXRoeV90YWJsZSxzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkcmVzLjEuNCkKYWdncmVfd3RfY2lsaW9wYXRoeV9jbHVzdGVyPC1hZ2dyZWdhdGUod3RfY2lsaW9wYXRoeV9jbHVzdGVyWywgMToxMTJdLCBsaXN0KHd0X2NpbGlvcGF0aHlfY2x1c3RlclssMTEzXSksIG1lZGlhbikKI2FnZ3JlX3d0X2NpbGlvcGF0aHlfY2x1c3RlclthZ2dyZV93dF9jaWxpb3BhdGh5X2NsdXN0ZXIkR3JvdXAuMT09OCxdW29yZGVyKGFnZ3JlX3d0X2NpbGlvcGF0aHlfY2x1c3RlclthZ2dyZV93dF9jaWxpb3BhdGh5X2NsdXN0ZXIkR3JvdXAuMT09OCxdLGRlY3JlYXNpbmcgPSBUUlVFKV0KYGBgCmBgYHtyfQp4PC1zb3J0KGFnZ3JlX3d0X2NpbGlvcGF0aHlfY2x1c3RlclthZ2dyZV93dF9jaWxpb3BhdGh5X2NsdXN0ZXIkR3JvdXAuMT09OCxdLGRlY3JlYXNpbmcgPSBUUlVFKQp1bmxpc3QoeClbMjozMF0KYGBgCmBgYHtyfQp3dF9tdWNvc2FfY2x1c3RlcjwtZGF0YS5mcmFtZShwZXJjZW50aWxlX3RhYmxlX0UxNUUxNlAxUDR3dFssY29sbmFtZXMocGVyY2VudGlsZV90YWJsZV9FMTVFMTZQMVA0d3QpICVpbiUgZ2VuZUxpc3QkTXVjb3NhLmVwaXRoZWxpdW0uZ29ibGV0XSxzZXVyYXRfRTE1RTE2UDFQNF93dEBtZXRhLmRhdGEkcmVzLjEuNCkKYWdncmVfd3RfbXVjb3NhX2NsdXN0ZXI8LWFnZ3JlZ2F0ZSh3dF9tdWNvc2FfY2x1c3RlclssIDE6MzAxXSwgbGlzdCh3dF9tdWNvc2FfY2x1c3RlclssMzAyXSksIG1lZGlhbikKCmBgYApgYGB7cn0KdW5saXN0KHNvcnQoYWdncmVfd3RfbXVjb3NhX2NsdXN0ZXJbYWdncmVfd3RfbXVjb3NhX2NsdXN0ZXIkR3JvdXAuMT09OCxdLGRlY3JlYXNpbmcgPSBUUlVFKSlbMjo1MV0KYGBgCgoKCgoKCgoKCgoK